annotate src/http/modules/ngx_http_ssi_filter_module.c @ 196:8759b346e431 NGINX_0_3_45

nginx 0.3.45 *) Feature: the "ssl_verify_client", "ssl_verify_depth", and "ssl_client_certificate" directives. *) Change: the $request_method variable now returns the main request method. *) Change: the ° symbol codes were changed in koi-win conversion table. *) Feature: the euro и N symbols were added to koi-win conversion table. *) Bugfix: if nginx distributed the requests among several backends and some backend failed, then requests intended for this backend was directed to one live backend only instead of being distributed among the rest.
author Igor Sysoev <http://sysoev.ru>
date Sat, 06 May 2006 00:00:00 +0400
parents 003bd800ec2a
children d2ae1c9f1fd3
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
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
11 #define NGX_HTTP_SSI_ERROR 1
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
12
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
13 #define NGX_HTTP_SSI_DATE_LEN 2048
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
14
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
15 #define NGX_HTTP_SSI_ADD_PREFIX 1
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
16 #define NGX_HTTP_SSI_ADD_ZERO 2
184
71ff1e2b484a nginx 0.3.39
Igor Sysoev <http://sysoev.ru>
parents: 178
diff changeset
17 #define NGX_HTTP_SSI_EXPR_TEST 4
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
18
46
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 {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
21 ngx_flag_t enable;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
22 ngx_flag_t silent_errors;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
23 ngx_flag_t ignore_recycled_buffers;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
24
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
25 ngx_array_t *types; /* array of ngx_str_t */
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
26
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
27 size_t min_file_chunk;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
28 size_t value_len;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
29 } ngx_http_ssi_loc_conf_t;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
30
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
31
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
32 typedef struct {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
33 ngx_str_t name;
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
34 ngx_uint_t key;
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
35 ngx_str_t value;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
36 } ngx_http_ssi_var_t;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39 typedef enum {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40 ssi_start_state = 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41 ssi_tag_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42 ssi_comment0_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43 ssi_comment1_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
44 ssi_sharp_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45 ssi_precommand_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 ssi_command_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47 ssi_preparam_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48 ssi_param_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
49 ssi_preequal_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
50 ssi_prevalue_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51 ssi_double_quoted_value_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
52 ssi_quoted_value_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
53 ssi_quoted_symbol_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
54 ssi_postparam_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
55 ssi_comment_end0_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
56 ssi_comment_end1_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57 ssi_error_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58 ssi_error_end0_state,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
59 ssi_error_end1_state
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
60 } ngx_http_ssi_state_e;
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
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
63 static ngx_int_t ngx_http_ssi_output(ngx_http_request_t *r,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
64 ngx_http_ssi_ctx_t *ctx);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
65 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
66 ngx_http_ssi_ctx_t *ctx);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
67 static ngx_str_t *ngx_http_ssi_get_variable(ngx_http_request_t *r,
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
68 ngx_str_t *name, ngx_uint_t key);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
69 static ngx_int_t ngx_http_ssi_evaluate_string(ngx_http_request_t *r,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
70 ngx_http_ssi_ctx_t *ctx, ngx_str_t *text, ngx_uint_t flags);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
71
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
72 static ngx_int_t ngx_http_ssi_include(ngx_http_request_t *r,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
73 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
74 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
75 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
76 static ngx_int_t ngx_http_ssi_config(ngx_http_request_t *r,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
77 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
78 static ngx_int_t ngx_http_ssi_set(ngx_http_request_t *r,
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
79 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
80 static ngx_int_t ngx_http_ssi_if(ngx_http_request_t *r,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
81 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
82 static ngx_int_t ngx_http_ssi_else(ngx_http_request_t *r,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
83 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
84 static ngx_int_t ngx_http_ssi_endif(ngx_http_request_t *r,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
85 ngx_http_ssi_ctx_t *ctx, ngx_str_t **params);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
86
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
87 static ngx_int_t ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
88 ngx_http_variable_value_t *v, uintptr_t gmt);
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
89
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
90 static char *ngx_http_ssi_types(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
91
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
92 static ngx_int_t ngx_http_ssi_preconfiguration(ngx_conf_t *cf);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
93 static void *ngx_http_ssi_create_main_conf(ngx_conf_t *cf);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
94 static char *ngx_http_ssi_init_main_conf(ngx_conf_t *cf, void *conf);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
95 static void *ngx_http_ssi_create_conf(ngx_conf_t *cf);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
96 static char *ngx_http_ssi_merge_conf(ngx_conf_t *cf,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
97 void *parent, void *child);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
98 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
99
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
100
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
101 static ngx_command_t ngx_http_ssi_filter_commands[] = {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
102
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
103 { ngx_string("ssi"),
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
104 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
105 ngx_conf_set_flag_slot,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
106 NGX_HTTP_LOC_CONF_OFFSET,
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
107 offsetof(ngx_http_ssi_loc_conf_t, enable),
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
108 NULL },
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
109
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
110 { ngx_string("ssi_silent_errors"),
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
111 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
112 ngx_conf_set_flag_slot,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
113 NGX_HTTP_LOC_CONF_OFFSET,
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
114 offsetof(ngx_http_ssi_loc_conf_t, silent_errors),
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
115 NULL },
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
116
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
117 { ngx_string("ssi_ignore_recycled_buffers"),
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
118 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
119 ngx_conf_set_flag_slot,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
120 NGX_HTTP_LOC_CONF_OFFSET,
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
121 offsetof(ngx_http_ssi_loc_conf_t, ignore_recycled_buffers),
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
122 NULL },
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
123
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
124 { ngx_string("ssi_min_file_chunk"),
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
125 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
126 ngx_conf_set_size_slot,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
127 NGX_HTTP_LOC_CONF_OFFSET,
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
128 offsetof(ngx_http_ssi_loc_conf_t, min_file_chunk),
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
129 NULL },
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
130
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
131 { ngx_string("ssi_value_length"),
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
132 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
133 ngx_conf_set_size_slot,
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
134 NGX_HTTP_LOC_CONF_OFFSET,
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
135 offsetof(ngx_http_ssi_loc_conf_t, value_len),
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
136 NULL },
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
137
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
138 { ngx_string("ssi_types"),
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
139 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
140 ngx_http_ssi_types,
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
141 NGX_HTTP_LOC_CONF_OFFSET,
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
142 0,
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
143 NULL },
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
144
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
145 ngx_null_command
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
148
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
149
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
150 static ngx_http_module_t ngx_http_ssi_filter_module_ctx = {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
151 ngx_http_ssi_preconfiguration, /* preconfiguration */
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
152 NULL, /* postconfiguration */
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
153
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
154 ngx_http_ssi_create_main_conf, /* create main configuration */
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
155 ngx_http_ssi_init_main_conf, /* init main configuration */
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
156
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
157 NULL, /* create server configuration */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
158 NULL, /* merge server configuration */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
159
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
160 ngx_http_ssi_create_conf, /* create location configuration */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
161 ngx_http_ssi_merge_conf /* merge location configuration */
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
162 };
46
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 ngx_module_t ngx_http_ssi_filter_module = {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
166 NGX_MODULE_V1,
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
167 &ngx_http_ssi_filter_module_ctx, /* module context */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
168 ngx_http_ssi_filter_commands, /* module directives */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
169 NGX_HTTP_MODULE, /* module type */
90
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 82
diff changeset
170 NULL, /* init master */
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
171 ngx_http_ssi_filter_init, /* init module */
90
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 82
diff changeset
172 NULL, /* init process */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 82
diff changeset
173 NULL, /* init thread */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 82
diff changeset
174 NULL, /* exit thread */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 82
diff changeset
175 NULL, /* exit process */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 82
diff changeset
176 NULL, /* exit master */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 82
diff changeset
177 NGX_MODULE_V1_PADDING
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
178 };
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
118
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
181 static ngx_http_output_header_filter_pt ngx_http_next_header_filter;
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
182 static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
183
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 static u_char ngx_http_ssi_string[] = "<!--";
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_str_t ngx_http_ssi_none = ngx_string("(none)");
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
188
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
189 #define NGX_HTTP_SSI_INCLUDE_VIRTUAL 0
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
190 #define NGX_HTTP_SSI_INCLUDE_FILE 1
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
191 #define NGX_HTTP_SSI_INCLUDE_WAIT 2
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
192
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
193 #define NGX_HTTP_SSI_ECHO_VAR 0
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
194 #define NGX_HTTP_SSI_ECHO_DEFAULT 1
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
195
96
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
196 #define NGX_HTTP_SSI_CONFIG_ERRMSG 0
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
197 #define NGX_HTTP_SSI_CONFIG_TIMEFMT 1
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
198
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
199 #define NGX_HTTP_SSI_SET_VAR 0
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
200 #define NGX_HTTP_SSI_SET_VALUE 1
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
201
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
202 #define NGX_HTTP_SSI_IF_EXPR 0
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
203
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
204
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
205 static ngx_http_ssi_param_t ngx_http_ssi_include_params[] = {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
206 { ngx_string("virtual"), NGX_HTTP_SSI_INCLUDE_VIRTUAL, 0, 0 },
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
207 { ngx_string("file"), NGX_HTTP_SSI_INCLUDE_FILE, 0, 0 },
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
208 { ngx_string("wait"), NGX_HTTP_SSI_INCLUDE_WAIT, 0, 0 },
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
209 { ngx_null_string, 0, 0, 0 }
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
210 };
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
211
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
212
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
213 static ngx_http_ssi_param_t ngx_http_ssi_echo_params[] = {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
214 { ngx_string("var"), NGX_HTTP_SSI_ECHO_VAR, 1, 0 },
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
215 { ngx_string("default"), NGX_HTTP_SSI_ECHO_DEFAULT, 0, 0 },
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
216 { ngx_null_string, 0, 0, 0 }
46
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
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
219
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
220 static ngx_http_ssi_param_t ngx_http_ssi_config_params[] = {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
221 { ngx_string("errmsg"), NGX_HTTP_SSI_CONFIG_ERRMSG, 0, 0 },
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
222 { ngx_string("timefmt"), NGX_HTTP_SSI_CONFIG_TIMEFMT, 0, 0 },
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
223 { ngx_null_string, 0, 0, 0 }
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
224 };
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
225
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
226
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
227 static ngx_http_ssi_param_t ngx_http_ssi_set_params[] = {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
228 { ngx_string("var"), NGX_HTTP_SSI_SET_VAR, 1, 0 },
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
229 { ngx_string("value"), NGX_HTTP_SSI_SET_VALUE, 1, 0 },
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
230 { ngx_null_string, 0, 0, 0 }
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
231 };
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
232
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
233
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
234 static ngx_http_ssi_param_t ngx_http_ssi_if_params[] = {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
235 { ngx_string("expr"), NGX_HTTP_SSI_IF_EXPR, 1, 0 },
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
236 { ngx_null_string, 0, 0, 0 }
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
237 };
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
238
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
239
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
240 static ngx_http_ssi_param_t ngx_http_ssi_no_params[] = {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
241 { ngx_null_string, 0, 0, 0 }
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
242 };
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
243
46
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 static ngx_http_ssi_command_t ngx_http_ssi_commands[] = {
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
246 { ngx_string("include"), ngx_http_ssi_include,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
247 ngx_http_ssi_include_params, 0, 1 },
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
248 { ngx_string("echo"), ngx_http_ssi_echo, ngx_http_ssi_echo_params, 0, 0 },
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
249 { ngx_string("config"), ngx_http_ssi_config,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
250 ngx_http_ssi_config_params, 0, 0 },
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
251 { ngx_string("set"), ngx_http_ssi_set, ngx_http_ssi_set_params, 0, 0 },
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
252
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
253 { ngx_string("if"), ngx_http_ssi_if, ngx_http_ssi_if_params, 0, 0 },
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
254 { ngx_string("elif"), ngx_http_ssi_if, ngx_http_ssi_if_params,
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
255 NGX_HTTP_SSI_COND_IF, 0 },
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
256 { ngx_string("else"), ngx_http_ssi_else, ngx_http_ssi_no_params,
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
257 NGX_HTTP_SSI_COND_IF, 0 },
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
258 { ngx_string("endif"), ngx_http_ssi_endif, ngx_http_ssi_no_params,
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
259 NGX_HTTP_SSI_COND_ELSE, 0 },
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
260
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
261 { ngx_null_string, NULL, NULL, 0, 0 }
46
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
264
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
265 static ngx_http_variable_t ngx_http_ssi_vars[] = {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
266
186
54aabf2b0bc6 nginx 0.3.40
Igor Sysoev <http://sysoev.ru>
parents: 184
diff changeset
267 { ngx_string("date_local"), NULL, ngx_http_ssi_date_gmt_local_variable, 0,
82
2aa14f638cf0 nginx 0.1.41
Igor Sysoev <http://sysoev.ru>
parents: 78
diff changeset
268 NGX_HTTP_VAR_NOCACHABLE, 0 },
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
269
186
54aabf2b0bc6 nginx 0.3.40
Igor Sysoev <http://sysoev.ru>
parents: 184
diff changeset
270 { ngx_string("date_gmt"), NULL, ngx_http_ssi_date_gmt_local_variable, 1,
82
2aa14f638cf0 nginx 0.1.41
Igor Sysoev <http://sysoev.ru>
parents: 78
diff changeset
271 NGX_HTTP_VAR_NOCACHABLE, 0 },
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
272
186
54aabf2b0bc6 nginx 0.3.40
Igor Sysoev <http://sysoev.ru>
parents: 184
diff changeset
273 { ngx_null_string, NULL, NULL, 0, 0, 0 }
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
274 };
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
275
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
276
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
277
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
278 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
279 ngx_http_ssi_header_filter(ngx_http_request_t *r)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
280 {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
281 ngx_uint_t i;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
282 ngx_str_t *type;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
283 ngx_http_ssi_ctx_t *ctx;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
284 ngx_http_ssi_loc_conf_t *slcf;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
285
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
286 slcf = ngx_http_get_module_loc_conf(r, ngx_http_ssi_filter_module);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
287
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
288 if (!slcf->enable
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
289 || r->headers_out.content_type.len == 0
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
290 || r->headers_out.content_length_n == 0)
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
291 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
292 return ngx_http_next_header_filter(r);
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
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
296 type = slcf->types->elts;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
297 for (i = 0; i < slcf->types->nelts; i++) {
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
298 if (r->headers_out.content_type.len >= type[i].len
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
299 && ngx_strncasecmp(r->headers_out.content_type.data,
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
300 type[i].data, type[i].len) == 0)
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
301 {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
302 goto found;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
303 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
304 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
305
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
306 return ngx_http_next_header_filter(r);
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
307
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
308
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
309 found:
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
310
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
311 ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_ssi_ctx_t));
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
312 if (ctx == NULL) {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
313 return NGX_ERROR;
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
316 ngx_http_set_ctx(r, ctx, ngx_http_ssi_filter_module);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
317
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
318
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
319 ctx->value_len = slcf->value_len;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
320 ctx->last_out = &ctx->out;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
321
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
322 ctx->output = 1;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
323
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
324 ctx->params.elts = ctx->params_array;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
325 ctx->params.size = sizeof(ngx_table_elt_t);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
326 ctx->params.nalloc = NGX_HTTP_SSI_PARAMS_N;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
327 ctx->params.pool = r->pool;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
328
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
329 ctx->timefmt.len = sizeof("%A, %d-%b-%Y %H:%M:%S %Z") - 1;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
330 ctx->timefmt.data = (u_char *) "%A, %d-%b-%Y %H:%M:%S %Z";
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
331
96
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
332 ctx->errmsg.len =
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
333 sizeof("[an error occurred while processing the directive]") - 1;
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
334 ctx->errmsg.data = (u_char *)
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
335 "[an error occurred while processing the directive]";
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
336
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
337 r->filter_need_in_memory = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
338
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
339 if (r == r->main) {
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
340 ngx_http_clear_content_length(r);
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
341 ngx_http_clear_last_modified(r);
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
342 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
343
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
344 return ngx_http_next_header_filter(r);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
345 }
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
348 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
349 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
350 {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
351 ngx_int_t rc;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
352 ngx_buf_t *b;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
353 ngx_uint_t i, index;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
354 ngx_chain_t *cl;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
355 ngx_table_elt_t *param;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
356 ngx_connection_t *c;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
357 ngx_http_ssi_ctx_t *ctx;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
358 ngx_http_ssi_param_t *prm;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
359 ngx_http_ssi_command_t *cmd;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
360 ngx_http_ssi_loc_conf_t *slcf;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
361 ngx_http_ssi_main_conf_t *smcf;
148
ea622d8acb38 nginx 0.3.21
Igor Sysoev <http://sysoev.ru>
parents: 146
diff changeset
362 ngx_str_t *params[NGX_HTTP_SSI_MAX_PARAMS + 1];
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
363
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
364 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
365
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
366 if (ctx == NULL
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
367 || (in == NULL
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
368 && ctx->buf == NULL
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
369 && ctx->in == NULL
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
370 && ctx->busy == NULL))
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
371 {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
372 return ngx_http_next_body_filter(r, in);
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 /* add the incoming chain to the chain ctx->in */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
376
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
377 if (in) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
378 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
379 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
380 }
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
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
383 if (ctx->wait) {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
384 if (r->connection->data != r) {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
385 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
386 "http ssi filter \"%V\" wait", &r->uri);
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
387 return NGX_AGAIN;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
388 }
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
389
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
390 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
391 "http ssi filter \"%V\" continue", &r->uri);
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
392
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
393 ctx->wait = 0;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
394 }
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
395
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
396 slcf = ngx_http_get_module_loc_conf(r, ngx_http_ssi_filter_module);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
397
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
398 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
399 "http ssi filter \"%V\"", &r->uri);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
400
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
401 while (ctx->in || ctx->buf) {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
402
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
403 if (ctx->buf == NULL ){
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
404 ctx->buf = ctx->in->buf;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
405 ctx->in = ctx->in->next;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
406 ctx->pos = ctx->buf->pos;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
407 }
46
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 if (ctx->state == ssi_start_state) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
410 ctx->copy_start = ctx->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
411 ctx->copy_end = ctx->pos;
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
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
414 b = NULL;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
415
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
416 while (ctx->pos < ctx->buf->last) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
417
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
418 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
419 "saved: %d state: %d", ctx->saved, ctx->state);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
420
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
421 rc = ngx_http_ssi_parse(r, ctx);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
422
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
423 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
424 "parse: %d, looked: %d %p-%p",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
425 rc, ctx->looked, ctx->copy_start, ctx->copy_end);
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 if (rc == NGX_ERROR) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
428 return rc;
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
431 if (ctx->copy_start != ctx->copy_end) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
432
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
433 if (ctx->output) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
434
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
435 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
436 "saved: %d", ctx->saved);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
437
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
438 if (ctx->saved) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
439
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
440 if (ctx->free) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
441 cl = ctx->free;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
442 ctx->free = ctx->free->next;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
443 b = cl->buf;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
444 ngx_memzero(b, sizeof(ngx_buf_t));
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
445
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
446 } else {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
447 b = ngx_calloc_buf(r->pool);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
448 if (b == NULL) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
449 return NGX_ERROR;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
450 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
451
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
452 cl = ngx_alloc_chain_link(r->pool);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
453 if (cl == NULL) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
454 return NGX_ERROR;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
455 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
456
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
457 cl->buf = b;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
458 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
459
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
460 b->memory = 1;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
461 b->pos = ngx_http_ssi_string;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
462 b->last = ngx_http_ssi_string + ctx->saved;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
463
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
464 *ctx->last_out = cl;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
465 ctx->last_out = &cl->next;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
466
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
467 ctx->saved = 0;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
468 }
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
469
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
470 if (ctx->free) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
471 cl = ctx->free;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
472 ctx->free = ctx->free->next;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
473 b = cl->buf;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
474
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
475 } else {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
476 b = ngx_alloc_buf(r->pool);
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
477 if (b == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
478 return NGX_ERROR;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
479 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
480
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
481 cl = ngx_alloc_chain_link(r->pool);
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
482 if (cl == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
483 return NGX_ERROR;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
484 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
485
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
486 cl->buf = b;
46
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
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
489 ngx_memcpy(b, ctx->buf, sizeof(ngx_buf_t));
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
490
62
0790a8599248 nginx 0.1.31
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
491 b->pos = ctx->copy_start;
0790a8599248 nginx 0.1.31
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
492 b->last = ctx->copy_end;
0790a8599248 nginx 0.1.31
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
493 b->shadow = NULL;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
494 b->last_buf = 0;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
495 b->recycled = 0;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
496
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
497 if (b->in_file) {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
498 if (slcf->min_file_chunk < (size_t) (b->last - b->pos))
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
499 {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
500 b->file_last = b->file_pos + (b->last - b->start);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
501 b->file_pos += b->pos - b->start;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
502
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
503 } else {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
504 b->in_file = 0;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
505 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
506 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
507
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
508 cl->next = NULL;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
509 *ctx->last_out = cl;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
510 ctx->last_out = &cl->next;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
511
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
512 } else {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
513 ctx->saved = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
514 }
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
517 if (ctx->state == ssi_start_state) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
518 ctx->copy_start = ctx->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
519 ctx->copy_end = ctx->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
520
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
521 } else {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
522 ctx->copy_start = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
523 ctx->copy_end = NULL;
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
526 if (rc == NGX_AGAIN) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
527 continue;
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
530
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
531 b = NULL;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
532
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
533 if (rc == NGX_OK) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
534
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
535 smcf = ngx_http_get_module_main_conf(r,
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
536 ngx_http_ssi_filter_module);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
537
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
538 cmd = ngx_hash_find(&smcf->hash, ctx->key, ctx->command.data,
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
539 ctx->command.len);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
540
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
541 if (cmd == NULL) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
542 if (ctx->output) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
543 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
544 "invalid SSI command: \"%V\"",
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
545 &ctx->command);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
546 goto ssi_error;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
547 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
548
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
549 continue;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
550 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
551
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
552 if (cmd->conditional
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
553 && (ctx->conditional == 0
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
554 || ctx->conditional > cmd->conditional))
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
555 {
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
556 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
557 "invalid context of SSI command: \"%V\"",
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
558 &ctx->command);
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
559 goto ssi_error;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
560 }
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
561
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
562 if (!ctx->output && cmd->conditional == 0) {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
563 continue;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
564 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
565
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
566 if (ctx->params.nelts > NGX_HTTP_SSI_MAX_PARAMS) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
567 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
568 "too many SSI command paramters: \"%V\"",
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
569 &ctx->command);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
570 goto ssi_error;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
571 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
572
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
573 ngx_memzero(params,
148
ea622d8acb38 nginx 0.3.21
Igor Sysoev <http://sysoev.ru>
parents: 146
diff changeset
574 (NGX_HTTP_SSI_MAX_PARAMS + 1) * sizeof(ngx_str_t *));
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
575
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
576 param = ctx->params.elts;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
577
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
578 for (i = 0; i < ctx->params.nelts; i++) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
579
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
580 for (prm = cmd->params; prm->name.len; prm++) {
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 if (param[i].key.len != prm->name.len
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
583 || ngx_strncmp(param[i].key.data, prm->name.data,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
584 prm->name.len) != 0)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
585 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
586 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
587 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
588
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
589 if (!prm->multiple) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
590 if (params[prm->index]) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
591 ngx_log_error(NGX_LOG_ERR,
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
592 r->connection->log, 0,
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
593 "duplicate \"%V\" parameter "
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
594 "in \"%V\" SSI command",
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
595 &param[i].key, &ctx->command);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
596
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
597 goto ssi_error;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
598 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
599
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
600 params[prm->index] = &param[i].value;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
601
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
602 break;
46
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
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
605 for (index = prm->index; params[index]; index++) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
606 /* void */
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
607 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
608
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
609 params[index] = &param[i].value;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
610
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
614 if (prm->name.len == 0) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
615 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
616 "invalid parameter name: \"%V\" "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
617 "in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
618 &param[i].key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
619
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
620 goto ssi_error;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
621 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
622 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
623
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
624 for (prm = cmd->params; prm->name.len; prm++) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
625 if (prm->mandatory && params[prm->index] == 0) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
626 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
627 "mandatory \"%V\" parameter is absent "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
628 "in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
629 &prm->name, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
630
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
631 goto ssi_error;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
632 }
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
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
635 if (cmd->flush && ctx->out) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
636 rc = ngx_http_ssi_output(r, ctx);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
637
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
638 if (rc == NGX_ERROR) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
639 return NGX_ERROR;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
640 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
641 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
642
118
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
643 c = r->connection;
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
644
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
645 rc = cmd->handler(r, ctx, params);
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
646
132
91372f004adf nginx 0.3.13
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
647 if (c->destroyed) {
118
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
648 return NGX_DONE;
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
649 }
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
650
644a7935144b nginx 0.3.6
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
651 if (rc == NGX_OK) {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
652 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
653 }
132
91372f004adf nginx 0.3.13
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
654
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
655 if (rc == NGX_AGAIN) {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
656 return NGX_AGAIN;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
657 }
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
658
132
91372f004adf nginx 0.3.13
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
659 if (rc == NGX_ERROR) {
91372f004adf nginx 0.3.13
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
660 return NGX_ERROR;
91372f004adf nginx 0.3.13
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
661 }
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
662 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
663
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
664
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
665 /* rc == NGX_HTTP_SSI_ERROR */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
666
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
667 ssi_error:
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
668
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
669 if (slcf->silent_errors) {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
670 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
671 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
672
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
673 if (ctx->free) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
674 cl = ctx->free;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
675 ctx->free = ctx->free->next;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
676 b = cl->buf;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
677 ngx_memzero(b, sizeof(ngx_buf_t));
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
678
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
679 } else {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
680 b = ngx_calloc_buf(r->pool);
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
681 if (b == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
682 return NGX_ERROR;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
683 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
684
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
685 cl = ngx_alloc_chain_link(r->pool);
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
686 if (cl == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
687 return NGX_ERROR;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
688 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
689
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
690 cl->buf = b;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
691 }
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 b->memory = 1;
96
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
694 b->pos = ctx->errmsg.data;
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
695 b->last = ctx->errmsg.data + ctx->errmsg.len;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
696
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
697 cl->next = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
698 *ctx->last_out = cl;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
699 ctx->last_out = &cl->next;
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 continue;
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
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
704 if (ctx->buf->last_buf || ctx->buf->recycled) {
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
705 if (b == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
706 if (ctx->free) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
707 cl = ctx->free;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
708 ctx->free = ctx->free->next;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
709 b = cl->buf;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
710 ngx_memzero(b, sizeof(ngx_buf_t));
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
711
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
712 } else {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
713 b = ngx_calloc_buf(r->pool);
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
714 if (b == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
715 return NGX_ERROR;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
716 }
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
717
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
718 cl = ngx_alloc_chain_link(r->pool);
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
719 if (cl == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
720 return NGX_ERROR;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
721 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
722
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
723 cl->buf = b;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
724 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
725
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
726 b->sync = 1;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
727
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
728 cl->next = NULL;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
729 *ctx->last_out = cl;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
730 ctx->last_out = &cl->next;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
731 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
732
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
733 b->last_buf = ctx->buf->last_buf;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
734 b->shadow = ctx->buf;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
735
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
736 if (slcf->ignore_recycled_buffers == 0) {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
737 b->recycled = ctx->buf->recycled;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
738 }
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
739 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
740
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
741 ctx->buf = NULL;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
742
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
743 ctx->saved = ctx->looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
744 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
745
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
746 if (ctx->out == NULL && ctx->busy == NULL) {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
747 return NGX_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
748 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
749
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
750 return ngx_http_ssi_output(r, ctx);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
751 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
752
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
753
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
754 static ngx_int_t
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
755 ngx_http_ssi_output(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx)
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
756 {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
757 ngx_int_t rc;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
758 ngx_buf_t *b;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
759 ngx_chain_t *cl;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
760
190
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
761 #if 1
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
762 b = NULL;
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
763 for (cl = ctx->out; cl; cl = cl->next) {
192
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
764 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
765 "ssi out: %p %p", cl->buf, cl->buf->pos);
190
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
766 if (cl->buf == b) {
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
767 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
768 "the same buf was used in ssi");
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
769 ngx_debug_point();
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
770 return NGX_ERROR;
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
771 }
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
772 b = cl->buf;
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
773 }
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
774 #endif
3689cd4e3228 nginx 0.3.42
Igor Sysoev <http://sysoev.ru>
parents: 186
diff changeset
775
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
776 rc = ngx_http_next_body_filter(r, ctx->out);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
777
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
778 if (ctx->busy == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
779 ctx->busy = ctx->out;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
780
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
781 } else {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
782 for (cl = ctx->busy; cl->next; cl = cl->next) { /* void */ }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
783 cl->next = ctx->out;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
784 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
785
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
786 ctx->out = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
787 ctx->last_out = &ctx->out;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
788
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
789 while (ctx->busy) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
790
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
791 b = ctx->busy->buf;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
792
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
793 if (ngx_buf_size(b) != 0) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
794 break;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
795 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
796
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
797 #if (NGX_HAVE_WRITE_ZEROCOPY)
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
798 if (b->zerocopy_busy) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
799 break;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
800 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
801 #endif
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
802
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
803 if (b->shadow) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
804 b->shadow->pos = b->shadow->last;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
805 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
806
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
807 cl = ctx->busy;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
808 ctx->busy = cl->next;
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
809
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
810 if (ngx_buf_in_memory(b) || b->in_file) {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
811 /* add data bufs only to the free buf chain */
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
812
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
813 cl->next = ctx->free;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
814 ctx->free = cl;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
815 }
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
816 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
817
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
818 return rc;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
819 }
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
822 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
823 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
824 {
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
825 u_char *p, *value, *last, *copy_end, ch;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
826 size_t looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
827 ngx_http_ssi_state_e state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
828
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
829 state = ctx->state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
830 looked = ctx->looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
831 last = ctx->buf->last;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
832 copy_end = ctx->copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
833
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
834 for (p = ctx->pos; p < last; p++) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
835
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
836 ch = *p;
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 if (state == ssi_start_state) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
839
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
840 /* the tight loop */
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
841
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
842 for ( ;; ) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
843 if (ch == '<') {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
844 copy_end = p;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
845 looked = 1;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
846 state = ssi_tag_state;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
847
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
848 goto tag_started;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
849 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
850
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
851 if (++p == last) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
852 break;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
853 }
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
854
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
855 ch = *p;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
856 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
857
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
858 ctx->pos = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
859 ctx->looked = looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
860 ctx->copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
861
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
862 if (ctx->copy_start == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
863 ctx->copy_start = ctx->buf->pos;
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 return NGX_AGAIN;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
867
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
868 tag_started:
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
869
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
870 continue;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
871 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
872
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
873 switch (state) {
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 ssi_start_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
876 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
877
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
878 case ssi_tag_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
879 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
880 case '!':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
881 looked = 2;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
882 state = ssi_comment0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
883 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
884
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
885 case '<':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
886 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
887 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
888
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
889 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
890 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
891 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
892 state = ssi_start_state;
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
896 break;
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 case ssi_comment0_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
899 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
900 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
901 looked = 3;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
902 state = ssi_comment1_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
903 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
904
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
905 case '<':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
906 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
907 looked = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
908 state = ssi_tag_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
909 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
910
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
911 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
912 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
913 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
914 state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
915 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
916 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
917
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
918 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
919
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
920 case ssi_comment1_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
921 switch (ch) {
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 looked = 4;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
924 state = ssi_sharp_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
925 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
926
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
927 case '<':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
928 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
929 looked = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
930 state = ssi_tag_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
931 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
932
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
933 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
934 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
935 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
936 state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
937 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
938 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
939
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
940 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
941
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
942 case ssi_sharp_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
943 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
944 case '#':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
945 if (ctx->copy_start) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
946 ctx->saved = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
947 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
948 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
949 state = ssi_precommand_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
950 break;
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 case '<':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
953 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
954 looked = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
955 state = ssi_tag_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
956 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
957
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
958 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
959 copy_end = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
960 looked = 0;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
961 state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
962 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
963 }
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 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
966
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
967 case ssi_precommand_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
968 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
969 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
970 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
971 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
972 case '\t':
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 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
976 ctx->command.len = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
977 ctx->command.data = ngx_palloc(r->pool,
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
978 NGX_HTTP_SSI_COMMAND_LEN);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
979 if (ctx->command.data == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
980 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
981 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
982
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
983 ctx->command.data[0] = ch;
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
984
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
985 ctx->key = 0;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
986 ctx->key = ngx_hash(ctx->key, ch);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
987
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
988 ctx->params.nelts = 0;
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
989
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
990 state = ssi_command_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
991 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
992 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
993
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 case ssi_command_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
997 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
998 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
999 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1000 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1001 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1002 state = ssi_preparam_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1003 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1004
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 state = ssi_comment_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1007 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1008
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1009 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1010 if (ctx->command.len == NGX_HTTP_SSI_COMMAND_LEN) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1011 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1012 "the \"%V%c...\" SSI command is too long",
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1013 &ctx->command, ch);
46
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 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1016 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1017 }
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1018
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1019 ctx->command.data[ctx->command.len++] = ch;
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1020 ctx->key = ngx_hash(ctx->key, ch);
46
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1023 break;
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 case ssi_preparam_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1026 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1027 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1028 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1029 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1030 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1031 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1032
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1033 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1034 state = ssi_comment_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1035 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1036
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1037 default:
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1038 ctx->param = ngx_array_push(&ctx->params);
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1039 if (ctx->param == NULL) {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1040 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1041 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1042
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1043 ctx->param->key.len = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1044 ctx->param->key.data = ngx_palloc(r->pool,
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1045 NGX_HTTP_SSI_PARAM_LEN);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1046 if (ctx->param->key.data == NULL) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1047 return NGX_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1048 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1049
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1050 ctx->param->key.data[0] = ch;
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 ctx->param->value.len = 0;
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1053
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1054 if (ctx->value_buf == NULL) {
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1055 ctx->param->value.data = ngx_palloc(r->pool,
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1056 ctx->value_len);
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1057 if (ctx->param->value.data == NULL) {
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1058 return NGX_ERROR;
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1059 }
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1060
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1061 } else {
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1062 ctx->param->value.data = ctx->value_buf;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1063 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1064
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1065 state = ssi_param_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1066 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1067 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1068
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1069 break;
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 case ssi_param_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1072 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1073 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1074 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1075 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1076 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1077 state = ssi_preequal_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1078 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1079
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1080 case '=':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1081 state = ssi_prevalue_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1082 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1083
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1084 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1085 state = ssi_error_end0_state;
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 ctx->param->key.data[ctx->param->key.len++] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1088 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1089 "invalid \"%V\" parameter in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1090 &ctx->param->key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1091 break;
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 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1094 if (ctx->param->key.len == NGX_HTTP_SSI_PARAM_LEN) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1095 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1096 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1097 "too long \"%V%c...\" parameter in "
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1098 "\"%V\" SSI command",
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1099 &ctx->param->key, ch, &ctx->command);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1100 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1101 }
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1102
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1103 ctx->param->key.data[ctx->param->key.len++] = ch;
46
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 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1107
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1108 case ssi_preequal_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1109 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1110 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1111 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1112 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1113 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1114 break;
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 case '=':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1117 state = ssi_prevalue_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1118 break;
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 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1121 if (ch == '-') {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1122 state = ssi_error_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1123 } else {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1124 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1125 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1126
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1127 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1128 "unexpected \"%c\" symbol after \"%V\" "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1129 "parameter in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1130 ch, &ctx->param->key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1131 break;
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 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1135
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1136 case ssi_prevalue_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1137 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1138 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1139 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1140 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1141 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1142 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1143
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1144 case '"':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1145 state = ssi_double_quoted_value_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1146 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1147
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1148 case '\'':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1149 state = ssi_quoted_value_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1150 break;
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 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1153 if (ch == '-') {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1154 state = ssi_error_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1155 } else {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1156 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1157 }
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_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1160 "unexpected \"%c\" symbol before value of "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1161 "\"%V\" parameter in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1162 ch, &ctx->param->key, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1163 break;
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
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1166 break;
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 case ssi_double_quoted_value_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1169 switch (ch) {
108
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1170 case '"':
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1171 state = ssi_postparam_state;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1172 break;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1173
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1174 case '\\':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1175 ctx->saved_state = ssi_double_quoted_value_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1176 state = ssi_quoted_symbol_state;
108
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1177
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1178 /* fall through */
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1179
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1180 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1181 if (ctx->param->value.len == ctx->value_len) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1182 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1183 "too long \"%V%c...\" value of \"%V\" "
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1184 "parameter in \"%V\" SSI command",
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1185 &ctx->param->value, ch, &ctx->param->key,
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1186 &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1187 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1188 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1189 }
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1190
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1191 ctx->param->value.data[ctx->param->value.len++] = ch;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1192 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1193
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1194 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1195
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1196 case ssi_quoted_value_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1197 switch (ch) {
108
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1198 case '\'':
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1199 state = ssi_postparam_state;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1200 break;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1201
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1202 case '\\':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1203 ctx->saved_state = ssi_quoted_value_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1204 state = ssi_quoted_symbol_state;
108
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1205
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1206 /* fall through */
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1207
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1208 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1209 if (ctx->param->value.len == ctx->value_len) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1210 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1211 "too long \"%V%c...\" value of \"%V\" "
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1212 "parameter in \"%V\" SSI command",
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1213 &ctx->param->value, ch, &ctx->param->key,
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1214 &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1215 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1216 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1217 }
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1218
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1219 ctx->param->value.data[ctx->param->value.len++] = ch;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1220 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1221
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1222 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1223
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1224 case ssi_quoted_symbol_state:
108
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1225 state = ctx->saved_state;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1226
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1227 if (ch == '\\') {
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1228 break;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1229 }
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1230
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1231 if (ch == '"' && state == ssi_double_quoted_value_state) {
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1232 ctx->param->value.data[ctx->param->value.len - 1] = ch;
108
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1233 break;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1234 }
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1235
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1236 if (ch == '\'' && state == ssi_quoted_value_state) {
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1237 ctx->param->value.data[ctx->param->value.len - 1] = ch;
108
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1238 break;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1239 }
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1240
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1241 if (ctx->param->value.len == ctx->value_len) {
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1242 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1243 "too long \"%V%c...\" value of \"%V\" "
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1244 "parameter in \"%V\" SSI command",
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1245 &ctx->param->value, ch, &ctx->param->key,
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1246 &ctx->command);
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1247 state = ssi_error_state;
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1248 break;
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1249 }
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1250
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1251 ctx->param->value.data[ctx->param->value.len++] = ch;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1252
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1253 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1254
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1255 case ssi_postparam_state:
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1256
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1257 if (ctx->param->value.len < ctx->value_len / 2) {
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1258 value = ngx_palloc(r->pool, ctx->param->value.len);
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1259 if (value == NULL) {
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1260 return NGX_ERROR;
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1261 }
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1262
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1263 ngx_memcpy(value, ctx->param->value.data,
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1264 ctx->param->value.len);
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1265
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1266 ctx->value_buf = ctx->param->value.data;
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1267 ctx->param->value.data = value;
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1268
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1269 } else {
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1270 ctx->value_buf = NULL;
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1271 }
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 148
diff changeset
1272
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1273 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1274 case ' ':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1275 case CR:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1276 case LF:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1277 case '\t':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1278 state = ssi_preparam_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1279 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1280
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1281 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1282 state = ssi_comment_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1283 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1284
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1285 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1286 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1287 "unexpected \"%c\" symbol after \"%V\" value "
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1288 "of \"%V\" parameter in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1289 ch, &ctx->param->value, &ctx->param->key,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1290 &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1291 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1292 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1293 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1294
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1295 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1296
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1297 case ssi_comment_end0_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1298 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1299 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1300 state = ssi_comment_end1_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1301 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1302
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1303 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1304 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1305 "unexpected \"%c\" symbol in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1306 ch, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1307 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1308 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1309 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1310
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1311 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1312
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1313 case ssi_comment_end1_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1314 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1315 case '>':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1316 ctx->state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1317 ctx->pos = p + 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1318 ctx->looked = looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1319 ctx->copy_end = copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1320
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1321 if (ctx->copy_start == NULL && copy_end) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1322 ctx->copy_start = ctx->buf->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1323 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1324
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1325 return NGX_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1326
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1327 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1328 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1329 "unexpected \"%c\" symbol in \"%V\" SSI command",
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1330 ch, &ctx->command);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1331 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1332 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1333 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1334
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1335 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1336
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1337 case ssi_error_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1338 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1339 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1340 state = ssi_error_end0_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1341 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1342
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1343 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1344 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1345 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1346
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1347 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1348
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1349 case ssi_error_end0_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1350 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1351 case '-':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1352 state = ssi_error_end1_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1353 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1354
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1355 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1356 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1357 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1358 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1359
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1360 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1361
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1362 case ssi_error_end1_state:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1363 switch (ch) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1364 case '>':
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1365 ctx->state = ssi_start_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1366 ctx->pos = p + 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1367 ctx->looked = looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1368 ctx->copy_end = copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1369
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1370 if (ctx->copy_start == NULL && copy_end) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1371 ctx->copy_start = ctx->buf->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1372 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1373
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1374 return NGX_HTTP_SSI_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1375
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1376 default:
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1377 state = ssi_error_state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1378 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1379 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1380
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1381 break;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1382 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1383 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1384
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1385 ctx->state = state;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1386 ctx->pos = p;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1387 ctx->looked = looked;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1388
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1389 ctx->copy_end = (state == ssi_start_state) ? p : copy_end;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1390
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1391 if (ctx->copy_start == NULL && ctx->copy_end) {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1392 ctx->copy_start = ctx->buf->pos;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1393 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1394
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1395 return NGX_AGAIN;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1396 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1397
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1398
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1399 static ngx_str_t *
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1400 ngx_http_ssi_get_variable(ngx_http_request_t *r, ngx_str_t *name,
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1401 ngx_uint_t key)
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1402 {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1403 ngx_uint_t i;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1404 ngx_http_ssi_var_t *var;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1405 ngx_http_ssi_ctx_t *ctx;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1406
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1407 ctx = ngx_http_get_module_ctx(r->main, ngx_http_ssi_filter_module);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1408
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1409 var = ctx->variables.elts;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1410 for (i = 0; i < ctx->variables.nelts; i++) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1411 if (name->len != var[i].name.len) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1412 continue;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1413 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1414
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1415 if (key != var[i].key) {
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1416 continue;
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1417 }
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1418
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1419 if (ngx_strncmp(name->data, var[i].name.data, name->len) == 0) {
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1420 return &var[i].value;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1421 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1422 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1423
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1424 return NULL;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1425 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1426
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1427
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1428 static ngx_int_t
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1429 ngx_http_ssi_evaluate_string(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1430 ngx_str_t *text, ngx_uint_t flags)
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1431 {
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1432 u_char ch, *p, **value, *data, *part_data;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1433 size_t *size, len, prefix, part_len;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1434 ngx_str_t var, *val;
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1435 ngx_int_t key;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1436 ngx_uint_t i, j, n, bracket;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1437 ngx_array_t lengths, values;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1438 ngx_http_variable_value_t *vv;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1439
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1440 n = ngx_http_script_variables_count(text);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1441
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1442 if (n == 0) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1443
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1444 if (!(flags & NGX_HTTP_SSI_ADD_PREFIX)) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1445 return NGX_OK;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1446 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1447
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1448 if (text->data[0] != '/') {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1449 for (prefix = r->uri.len; prefix; prefix--) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1450 if (r->uri.data[prefix - 1] == '/') {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1451 break;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1452 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1453 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1454
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1455 if (prefix) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1456 len = prefix + text->len;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1457
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1458 data = ngx_palloc(r->pool, len);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1459 if (data == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1460 return NGX_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1461 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1462
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1463 p = ngx_copy(data, r->uri.data, prefix);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1464 ngx_memcpy(p, text->data, text->len);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1465
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1466 text->len = len;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1467 text->data = data;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1468 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1469 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1470
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1471 return NGX_OK;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1472 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1473
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1474 if (ngx_array_init(&lengths, r->pool, 8, sizeof(size_t *)) != NGX_OK) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1475 return NGX_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1476 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1477
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1478 if (ngx_array_init(&values, r->pool, 8, sizeof(u_char *)) != NGX_OK) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1479 return NGX_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1480 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1481
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1482 len = 0;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1483 i = 0;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1484
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1485 while (i < text->len) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1486
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1487 if (text->data[i] == '$') {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1488
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1489 var.len = 0;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1490
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1491 if (++i == text->len) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1492 goto invalid_variable;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1493 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1494
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1495 if (text->data[i] == '{') {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1496 bracket = 1;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1497
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1498 if (++i == text->len) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1499 goto invalid_variable;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1500 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1501
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1502 var.data = &text->data[i];
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1503
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1504 } else {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1505 bracket = 0;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1506 var.data = &text->data[i];
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1507 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1508
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1509 for ( /* void */ ; i < text->len; i++, var.len++) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1510 ch = text->data[i];
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1511
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1512 if (ch == '}' && bracket) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1513 i++;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1514 bracket = 0;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1515 break;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1516 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1517
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1518 if ((ch >= 'A' && ch <= 'Z')
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1519 || (ch >= 'a' && ch <= 'z')
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1520 || (ch >= '0' && ch <= '9')
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1521 || ch == '_')
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1522 {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1523 continue;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1524 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1525
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1526 break;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1527 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1528
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1529 if (bracket) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1530 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1531 "the closing bracket in \"%V\" "
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1532 "variable is missing", &var);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1533 return NGX_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1534 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1535
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
1536 if (var.len == 0) {
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1537 goto invalid_variable;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1538 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1539
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1540 key = 0;
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1541
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1542 for (j = 0; j < var.len; j++) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1543 var.data[j] = ngx_tolower(var.data[j]);
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1544 key = ngx_hash(key, var.data[j]);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1545 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1546
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1547 val = ngx_http_ssi_get_variable(r, &var, key);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1548
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1549 if (val == NULL) {
184
71ff1e2b484a nginx 0.3.39
Igor Sysoev <http://sysoev.ru>
parents: 178
diff changeset
1550 vv = ngx_http_get_variable(r, &var, key,
71ff1e2b484a nginx 0.3.39
Igor Sysoev <http://sysoev.ru>
parents: 178
diff changeset
1551 flags & NGX_HTTP_SSI_EXPR_TEST);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1552 if (vv == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1553 return NGX_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1554 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1555
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1556 if (vv->not_found) {
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1557 continue;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1558 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1559
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1560 part_data = vv->data;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1561 part_len = vv->len;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1562
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1563 } else {
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1564 part_data = val->data;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1565 part_len = val->len;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1566 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1567
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1568 } else {
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1569 part_data = &text->data[i];
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1570
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1571 for (p = part_data; i < text->len; i++) {
108
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1572 ch = text->data[i];
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1573
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1574 if (ch == '$') {
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1575 if (text->data[i - 1] != '\\') {
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1576 break;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1577 }
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1578
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1579 *(p - 1) = ch;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1580
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1581 continue;
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1582 }
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1583
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1584 *p++ = ch;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1585 }
108
cf3d6edb3ad6 nginx 0.3.1
Igor Sysoev <http://sysoev.ru>
parents: 102
diff changeset
1586
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1587 part_len = p - part_data;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1588 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1589
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1590 len += part_len;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1591
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1592 size = ngx_array_push(&lengths);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1593 if (size == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1594 return NGX_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1595 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1596
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1597 *size = part_len;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1598
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1599 value = ngx_array_push(&values);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1600 if (value == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1601 return NGX_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1602 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1603
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1604 *value = part_data;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1605 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1606
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1607 prefix = 0;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1608
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1609 size = lengths.elts;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1610 value = values.elts;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1611
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1612 if (flags & NGX_HTTP_SSI_ADD_PREFIX) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1613 for (i = 0; i < values.nelts; i++) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1614 if (size[i] != 0) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1615 if (*value[i] != '/') {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1616 for (prefix = r->uri.len; prefix; prefix--) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1617 if (r->uri.data[prefix - 1] == '/') {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1618 len += prefix;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1619 break;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1620 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1621 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1622 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1623
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1624 break;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1625 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1626 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1627 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1628
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1629 p = ngx_palloc(r->pool, len + ((flags & NGX_HTTP_SSI_ADD_ZERO) ? 1 : 0));
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1630 if (p == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1631 return NGX_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1632 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1633
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1634 text->len = len;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1635 text->data = p;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1636
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1637 p = ngx_copy(p, r->uri.data, prefix);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1638
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1639 for (i = 0; i < values.nelts; i++) {
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1640 p = ngx_copy(p, value[i], size[i]);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1641 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1642
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1643 return NGX_OK;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1644
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1645 invalid_variable:
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1646
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1647 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1648 "invalid variable name in \"%V\"", text);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1649
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1650 return NGX_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1651 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1652
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1653
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1654 static ngx_int_t
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1655 ngx_http_ssi_include(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1656 ngx_str_t **params)
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1657 {
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1658 ngx_int_t rc;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1659 ngx_str_t *uri, *file, *wait, args;
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1660 ngx_uint_t flags;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1661
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1662 uri = params[NGX_HTTP_SSI_INCLUDE_VIRTUAL];
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1663 file = params[NGX_HTTP_SSI_INCLUDE_FILE];
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1664 wait = params[NGX_HTTP_SSI_INCLUDE_WAIT];
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1665
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1666 if (uri && file) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1667 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1668 "inlcusion may be either virtual=\"%V\" or file=\"%V\"",
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1669 uri, file);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1670 return NGX_HTTP_SSI_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1671 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1672
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1673 if (uri == NULL && file == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1674 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1675 "no parameter in \"include\" SSI command");
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1676 return NGX_HTTP_SSI_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1677 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1678
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1679 if (wait) {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1680 if (uri == NULL) {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1681 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1682 "\"wait\" may not be used with file=\"%V\"",
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1683 uri, file);
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1684 return NGX_HTTP_SSI_ERROR;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1685 }
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1686
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1687 if (wait->len == 2 && ngx_strncasecmp(wait->data, "no", 2) == 0) {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1688 wait = NULL;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1689
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1690 } else if (wait->len != 3 || ngx_strncasecmp(wait->data, "yes", 3) != 0)
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1691 {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1692 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1693 "invalid value \"%V\" in the \"wait\" parameter",
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1694 &wait);
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1695 return NGX_HTTP_SSI_ERROR;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1696 }
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1697 }
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1698
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1699 if (uri == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1700 uri = file;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1701 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1702
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1703 if (ngx_http_ssi_evaluate_string(r, ctx, uri, NGX_HTTP_SSI_ADD_PREFIX)
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1704 != NGX_OK)
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1705 {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1706 return NGX_HTTP_SSI_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1707 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1708
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1709 args.len = 0;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1710 args.data = NULL;
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1711 flags = 0;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1712
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1713 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1714 "ssi include: \"%V\"", uri);
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1715
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1716 if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1717 return NGX_HTTP_SSI_ERROR;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1718 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1719
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1720 rc = ngx_http_subrequest(r, uri, &args, flags);
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1721
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1722 if (rc == NGX_ERROR) {
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1723 return NGX_HTTP_SSI_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1724 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1725
194
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1726 if (wait == NULL) {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1727 return NGX_OK;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1728 }
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1729
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1730 if (rc == NGX_AGAIN) {
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1731 ctx->wait = 1;
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1732 }
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1733
003bd800ec2a nginx 0.3.44
Igor Sysoev <http://sysoev.ru>
parents: 192
diff changeset
1734 return rc;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1735 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1736
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1737
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1738 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1739 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
1740 ngx_str_t **params)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1741 {
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1742 ngx_int_t key;
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
1743 ngx_uint_t i;
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1744 ngx_buf_t *b;
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1745 ngx_str_t *var, *value, text;
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1746 ngx_chain_t *cl;
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
1747 ngx_http_variable_value_t *vv;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1748
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1749 var = params[NGX_HTTP_SSI_ECHO_VAR];
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1750
192
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
1751 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
1752 "ssi echo \"%V\"", var);
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
1753
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1754 key = 0;
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1755
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1756 for (i = 0; i < var->len; i++) {
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1757 var->data[i] = ngx_tolower(var->data[i]);
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1758 key = ngx_hash(key, var->data[i]);
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1759 }
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1760
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1761 value = ngx_http_ssi_get_variable(r, var, key);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1762
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1763 if (value == NULL) {
184
71ff1e2b484a nginx 0.3.39
Igor Sysoev <http://sysoev.ru>
parents: 178
diff changeset
1764 vv = ngx_http_get_variable(r, var, key, 1);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1765
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1766 if (vv == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1767 return NGX_HTTP_SSI_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1768 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1769
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1770 if (!vv->not_found) {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1771 text.data = vv->data;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1772 text.len = vv->len;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1773 value = &text;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1774 }
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
1775 }
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1776
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1777 if (value == NULL) {
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1778 value = params[NGX_HTTP_SSI_ECHO_DEFAULT];
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1779
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1780 if (value == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1781 value = &ngx_http_ssi_none;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1782
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1783 } else if (value->len == 0) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1784 return NGX_OK;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1785 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1786
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1787 } else {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1788 if (value->len == 0) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1789 return NGX_OK;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1790 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1791 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1792
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1793 b = ngx_calloc_buf(r->pool);
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1794 if (b == NULL) {
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1795 return NGX_HTTP_SSI_ERROR;
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1796 }
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1797
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1798 cl = ngx_alloc_chain_link(r->pool);
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 46
diff changeset
1799 if (cl == NULL) {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1800 return NGX_HTTP_SSI_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1801 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1802
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1803 b->memory = 1;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1804 b->pos = value->data;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1805 b->last = value->data + value->len;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1806
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1807 cl->buf = b;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1808 cl->next = NULL;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1809 *ctx->last_out = cl;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1810 ctx->last_out = &cl->next;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1811
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1812 return NGX_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1813 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1814
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1815
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1816 static ngx_int_t
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1817 ngx_http_ssi_config(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1818 ngx_str_t **params)
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1819 {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1820 ngx_str_t *value;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1821
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1822 value = params[NGX_HTTP_SSI_CONFIG_TIMEFMT];
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1823
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1824 if (value) {
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
1825 ctx->timefmt.len = value->len;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
1826 ctx->timefmt.data = ngx_palloc(r->pool, value->len + 1);
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
1827 if (ctx->timefmt.data == NULL) {
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
1828 return NGX_HTTP_SSI_ERROR;
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
1829 }
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
1830
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 132
diff changeset
1831 ngx_cpystrn(ctx->timefmt.data, value->data, value->len + 1);
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1832 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1833
96
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
1834 value = params[NGX_HTTP_SSI_CONFIG_ERRMSG];
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
1835
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
1836 if (value) {
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
1837 ctx->errmsg = *value;
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
1838 }
ca4f70b3ccc6 nginx 0.2.2
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
1839
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1840 return NGX_OK;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1841 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1842
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1843
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1844 static ngx_int_t
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1845 ngx_http_ssi_set(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1846 ngx_str_t **params)
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1847 {
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1848 ngx_int_t key;
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1849 ngx_uint_t i;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1850 ngx_str_t *name, *value, *vv;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1851 ngx_http_ssi_var_t *var;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1852 ngx_http_ssi_ctx_t *mctx;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1853
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1854 mctx = ngx_http_get_module_ctx(r->main, ngx_http_ssi_filter_module);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1855
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1856 if (mctx->variables.elts == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1857 if (ngx_array_init(&mctx->variables, r->pool, 4,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1858 sizeof(ngx_http_ssi_var_t)) != NGX_OK)
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1859 {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1860 return NGX_HTTP_SSI_ERROR;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1861 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1862 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1863
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1864 name = params[NGX_HTTP_SSI_SET_VAR];
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1865 value = params[NGX_HTTP_SSI_SET_VALUE];
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1866
192
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
1867 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
1868 "ssi set \"%V\" \"%V\"", name, value);
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
1869
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1870 if (ngx_http_ssi_evaluate_string(r, ctx, value, 0) != NGX_OK) {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1871 return NGX_HTTP_SSI_ERROR;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1872 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1873
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1874 key = 0;
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1875
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1876 for (i = 0; i < name->len; i++) {
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1877 name->data[i] = ngx_tolower(name->data[i]);
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1878 key = ngx_hash(key, name->data[i]);
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1879 }
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1880
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1881 vv = ngx_http_ssi_get_variable(r, name, key);
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1882
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1883 if (vv) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1884 *vv = *value;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1885 return NGX_OK;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1886 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1887
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1888 var = ngx_array_push(&mctx->variables);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1889 if (var == NULL) {
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1890 return NGX_HTTP_SSI_ERROR;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1891 }
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1892
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1893 var->name = *name;
160
73e8476f9142 nginx 0.3.27
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
1894 var->key = key;
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1895 var->value = *value;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1896
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1897 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1898 "set: \"%V\"=\"%V\"", name, value);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1899
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1900 return NGX_OK;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1901 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1902
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1903
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1904 static ngx_int_t
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1905 ngx_http_ssi_if(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1906 ngx_str_t **params)
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1907 {
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1908 u_char *p, *last;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1909 ngx_str_t *expr, left, right;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1910 ngx_int_t rc;
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1911 ngx_uint_t negative, noregex, flags;
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1912 #if (NGX_PCRE)
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1913 ngx_str_t err;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1914 ngx_regex_t *regex;
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1915 u_char errstr[NGX_MAX_CONF_ERRSTR];
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1916 #endif
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1917
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1918 if (ctx->command.len == 2) {
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1919 if (ctx->conditional) {
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1920 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1921 "the \"if\" command inside the \"if\" command");
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1922 return NGX_HTTP_SSI_ERROR;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1923 }
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1924 }
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1925
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1926 if (ctx->output_chosen) {
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1927 ctx->output = 0;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1928 return NGX_OK;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1929 }
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1930
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1931 expr = params[NGX_HTTP_SSI_IF_EXPR];
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1932
192
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
1933 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
1934 "ssi if expr=\"%V\"", expr);
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
1935
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1936 left.data = expr->data;
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1937 last = expr->data + expr->len;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1938
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1939 for (p = left.data; p < last; p++) {
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1940 if (*p >= 'A' && *p <= 'Z') {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1941 *p |= 0x20;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1942 continue;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1943 }
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1944
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1945 if ((*p >= 'a' && *p <= 'z')
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1946 || (*p >= '0' && *p <= '9')
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1947 || *p == '$' || *p == '{' || *p == '}' || *p == '_'
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
1948 || *p == '"' || *p == '\'')
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1949 {
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1950 continue;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1951 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1952
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1953 break;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1954 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1955
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1956 left.len = p - left.data;
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1957
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1958 while (p < last && *p == ' ') {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1959 p++;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1960 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1961
184
71ff1e2b484a nginx 0.3.39
Igor Sysoev <http://sysoev.ru>
parents: 178
diff changeset
1962 flags = (p == last) ? NGX_HTTP_SSI_EXPR_TEST : 0;
71ff1e2b484a nginx 0.3.39
Igor Sysoev <http://sysoev.ru>
parents: 178
diff changeset
1963
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1964 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1965 "left: \"%V\"", &left);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1966
184
71ff1e2b484a nginx 0.3.39
Igor Sysoev <http://sysoev.ru>
parents: 178
diff changeset
1967 if (ngx_http_ssi_evaluate_string(r, ctx, &left, flags) != NGX_OK) {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1968 return NGX_HTTP_SSI_ERROR;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1969 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
1970
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1971 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1972 "evaluted left: \"%V\"", &left);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1973
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1974 if (p == last) {
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
1975 if (left.len) {
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1976 ctx->output = 1;
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1977 ctx->output_chosen = 1;
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1978
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1979 } else {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1980 ctx->output = 0;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1981 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1982
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1983 ctx->conditional = NGX_HTTP_SSI_COND_IF;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
1984
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1985 return NGX_OK;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1986 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1987
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1988 if (p < last && *p == '=') {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1989 negative = 0;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1990 p++;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1991
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1992 } else if (p + 1 < last && *p == '!' && *(p + 1) == '=') {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1993 negative = 1;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1994 p += 2;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1995
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1996 } else {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1997 goto invalid_expression;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1998 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
1999
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2000 while (p < last && *p == ' ') {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2001 p++;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2002 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2003
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2004 if (p < last && *p == '/') {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2005 if (*(last - 1) != '/') {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2006 goto invalid_expression;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2007 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2008
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2009 noregex = 0;
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2010 flags = NGX_HTTP_SSI_ADD_ZERO;
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2011 last--;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2012 p++;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2013
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2014 } else {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2015 noregex = 1;
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2016 flags = 0;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2017
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2018 if (p < last - 1 && p[0] == '\\' && p[1] == '/') {
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2019 p++;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2020 }
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2021 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2022
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2023 right.len = last - p;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2024 right.data = p;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2025
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
2026 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
2027 "right: \"%V\"", &right);
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
2028
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2029 if (ngx_http_ssi_evaluate_string(r, ctx, &right, flags) != NGX_OK) {
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
2030 return NGX_HTTP_SSI_ERROR;
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2031 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2032
102
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
2033 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
f63280c59dd5 nginx 0.2.5
Igor Sysoev <http://sysoev.ru>
parents: 100
diff changeset
2034 "evaluted right: \"%V\"", &right);
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2035
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2036 if (noregex) {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2037 if (left.len != right.len) {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2038 rc = -1;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2039
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2040 } else {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2041 rc = ngx_strncmp(left.data, right.data, right.len);
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2042 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2043
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2044 } else {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2045 #if (NGX_PCRE)
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2046 err.len = NGX_MAX_CONF_ERRSTR;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2047 err.data = errstr;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2048
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2049 right.data[right.len] = '\0';
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2050
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2051 regex = ngx_regex_compile(&right, 0, r->pool, &err);
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2052
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2053 if (regex == NULL) {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2054 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "%s", err.data);
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2055 return NGX_HTTP_SSI_ERROR;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2056 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2057
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2058 rc = ngx_regex_exec(regex, &left, NULL, 0);
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2059
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2060 if (rc != NGX_REGEX_NO_MATCHED && rc < 0) {
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2061 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2062 ngx_regex_exec_n " failed: %d on \"%V\" using \"%V\"",
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2063 rc, &left, &right);
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2064 return NGX_HTTP_SSI_ERROR;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2065 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2066 #else
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2067 ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2068 "the using of the regex \"%V\" in SSI "
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2069 "requires PCRE library", &right);
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2070
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2071 return NGX_HTTP_SSI_ERROR;
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2072 #endif
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2073 }
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2074
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2075 if ((rc == 0 && !negative) || (rc != 0 && negative)) {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2076 ctx->output = 1;
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2077 ctx->output_chosen = 1;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2078
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2079 } else {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2080 ctx->output = 0;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2081 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2082
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2083 ctx->conditional = NGX_HTTP_SSI_COND_IF;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2084
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2085 return NGX_OK;
100
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2086
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2087 invalid_expression:
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2088
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2089 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2090 "invalid expression in \"%V\"", expr);
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2091
d6800bbe720e nginx 0.2.4
Igor Sysoev <http://sysoev.ru>
parents: 96
diff changeset
2092 return NGX_HTTP_SSI_ERROR;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2093 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2094
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2095
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2096 static ngx_int_t
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2097 ngx_http_ssi_else(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2098 ngx_str_t **params)
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2099 {
192
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
2100 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
2101 "ssi else");
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
2102
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2103 if (ctx->output_chosen) {
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2104 ctx->output = 0;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2105 } else {
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2106 ctx->output = 1;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2107 }
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2108
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2109 ctx->conditional = NGX_HTTP_SSI_COND_ELSE;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2110
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2111 return NGX_OK;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2112 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2113
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2114
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2115 static ngx_int_t
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2116 ngx_http_ssi_endif(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2117 ngx_str_t **params)
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2118 {
192
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
2119 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
2120 "ssi endif");
af7f2341ecc5 nginx 0.3.43
Igor Sysoev <http://sysoev.ru>
parents: 190
diff changeset
2121
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2122 ctx->output = 1;
178
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2123 ctx->output_chosen = 0;
87699398f955 nginx 0.3.36
Igor Sysoev <http://sysoev.ru>
parents: 160
diff changeset
2124 ctx->conditional = 0;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2125
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2126 return NGX_OK;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2127 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2128
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2129
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2130 static ngx_int_t
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2131 ngx_http_ssi_date_gmt_local_variable(ngx_http_request_t *r,
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2132 ngx_http_variable_value_t *v, uintptr_t gmt)
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2133 {
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2134 ngx_http_ssi_ctx_t *ctx;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2135 ngx_time_t *tp;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2136 struct tm tm;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2137 char buf[NGX_HTTP_SSI_DATE_LEN];
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2138
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
2139 v->valid = 1;
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2140 v->no_cachable = 0;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2141 v->not_found = 0;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2142
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
2143 tp = ngx_timeofday();
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
2144
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2145 ctx = ngx_http_get_module_ctx(r, ngx_http_ssi_filter_module);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2146
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2147 if (ctx->timefmt.len == sizeof("%s") - 1
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2148 && ctx->timefmt.data[0] == '%' && ctx->timefmt.data[1] == 's')
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2149 {
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2150 v->data = ngx_palloc(r->pool, NGX_TIME_T_LEN);
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2151 if (v->data == NULL) {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2152 return NGX_ERROR;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2153 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2154
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2155 v->len = ngx_sprintf(v->data, "%T", tp->sec + (gmt ? 0 : tp->gmtoff))
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2156 - v->data;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2157 return NGX_OK;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2158 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2159
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2160 if (gmt) {
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
2161 ngx_libc_gmtime(tp->sec, &tm);
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2162 } else {
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 108
diff changeset
2163 ngx_libc_localtime(tp->sec, &tm);
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2164 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2165
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2166 v->len = strftime(buf, NGX_HTTP_SSI_DATE_LEN,
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2167 (char *) ctx->timefmt.data, &tm);
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2168 if (v->len == 0) {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2169 return NGX_ERROR;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2170 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2171
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2172 v->data = ngx_palloc(r->pool, v->len);
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2173 if (v->data == NULL) {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2174 return NGX_ERROR;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2175 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2176
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2177 ngx_memcpy(v->data, buf, v->len);
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2178
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 118
diff changeset
2179 return NGX_OK;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2180 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2181
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2182
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2183 static char *
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2184 ngx_http_ssi_types(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2185 {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2186 ngx_http_ssi_loc_conf_t *slcf = conf;
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2187
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2188 ngx_str_t *value, *type;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2189 ngx_uint_t i;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2190
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2191 if (slcf->types == NULL) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2192 slcf->types = ngx_array_create(cf->pool, 4, sizeof(ngx_str_t));
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2193 if (slcf->types == NULL) {
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2194 return NGX_CONF_ERROR;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2195 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2196
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2197 type = ngx_array_push(slcf->types);
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2198 if (type == NULL) {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2199 return NGX_CONF_ERROR;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2200 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2201
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2202 type->len = sizeof("text/html") - 1;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2203 type->data = (u_char *) "text/html";
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2204 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2205
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2206 value = cf->args->elts;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2207
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2208 for (i = 1; i < cf->args->nelts; i++) {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2209
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2210 if (ngx_strcmp(value[i].data, "text/html") == 0) {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2211 continue;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2212 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2213
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2214 type = ngx_array_push(slcf->types);
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2215 if (type == NULL) {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2216 return NGX_CONF_ERROR;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2217 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2218
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2219 type->len = value[i].len;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2220
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2221 type->data = ngx_palloc(cf->pool, type->len + 1);
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2222 if (type->data == NULL) {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2223 return NGX_CONF_ERROR;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2224 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2225
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2226 ngx_cpystrn(type->data, value[i].data, type->len + 1);
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2227 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2228
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2229 return NGX_CONF_OK;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2230 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2231
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2232
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2233 static ngx_int_t
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2234 ngx_http_ssi_preconfiguration(ngx_conf_t *cf)
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2235 {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2236 ngx_int_t rc;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2237 ngx_http_variable_t *var, *v;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2238 ngx_http_ssi_command_t *cmd;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2239 ngx_http_ssi_main_conf_t *smcf;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2240
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2241 for (v = ngx_http_ssi_vars; v->name.len; v++) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2242 var = ngx_http_add_variable(cf, &v->name, v->flags);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2243 if (var == NULL) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2244 return NGX_ERROR;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2245 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2246
186
54aabf2b0bc6 nginx 0.3.40
Igor Sysoev <http://sysoev.ru>
parents: 184
diff changeset
2247 var->get_handler = v->get_handler;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2248 var->data = v->data;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2249 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2250
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2251 smcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_ssi_filter_module);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2252
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2253 for (cmd = ngx_http_ssi_commands; cmd->name.len; cmd++) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2254 rc = ngx_hash_add_key(&smcf->commands, &cmd->name, cmd,
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2255 NGX_HASH_READONLY_KEY);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2256
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2257 if (rc == NGX_OK) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2258 continue;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2259 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2260
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2261 if (rc == NGX_BUSY) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2262 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2263 "conflicting SSI command \"%V\"", &cmd->name);
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2264 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2265
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2266 return NGX_ERROR;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2267 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2268
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
2269 return NGX_OK;
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2270 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2271
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2272
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2273 static void *
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2274 ngx_http_ssi_create_main_conf(ngx_conf_t *cf)
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2275 {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2276 ngx_http_ssi_main_conf_t *smcf;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2277
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2278 smcf = ngx_pcalloc(cf->pool, sizeof(ngx_http_ssi_main_conf_t));
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2279 if (smcf == NULL) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2280 return NGX_CONF_ERROR;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2281 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2282
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2283 smcf->commands.pool = cf->pool;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2284 smcf->commands.temp_pool = cf->temp_pool;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2285
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2286 if (ngx_hash_keys_array_init(&smcf->commands, NGX_HASH_SMALL) != NGX_OK) {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2287 return NGX_CONF_ERROR;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2288 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2289
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2290 return smcf;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2291 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2292
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2293
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2294 static char *
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2295 ngx_http_ssi_init_main_conf(ngx_conf_t *cf, void *conf)
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2296 {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2297 ngx_http_ssi_main_conf_t *smcf = conf;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2298
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2299 ngx_hash_init_t hash;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2300
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2301 hash.hash = &smcf->hash;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2302 hash.key = ngx_hash_key;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2303 hash.max_size = 1024;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2304 hash.bucket_size = ngx_cacheline_size;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2305 hash.name = "ssi_command_hash";
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2306 hash.pool = cf->pool;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2307 hash.temp_pool = NULL;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2308
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2309 if (ngx_hash_init(&hash, smcf->commands.keys.elts,
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2310 smcf->commands.keys.nelts)
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2311 != NGX_OK)
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2312 {
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2313 return NGX_CONF_ERROR;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2314 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2315
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2316 return NGX_CONF_OK;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2317 }
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2318
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2319
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2320 static void *
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2321 ngx_http_ssi_create_conf(ngx_conf_t *cf)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2322 {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2323 ngx_http_ssi_loc_conf_t *slcf;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2324
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2325 slcf = ngx_pcalloc(cf->pool, sizeof(ngx_http_ssi_loc_conf_t));
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2326 if (slcf == NULL) {
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2327 return NGX_CONF_ERROR;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2328 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2329
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2330 /*
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2331 * set by ngx_pcalloc():
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2332 *
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2333 * conf->types = NULL;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2334 */
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2335
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2336 slcf->enable = NGX_CONF_UNSET;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2337 slcf->silent_errors = NGX_CONF_UNSET;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2338 slcf->ignore_recycled_buffers = NGX_CONF_UNSET;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2339
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2340 slcf->min_file_chunk = NGX_CONF_UNSET_SIZE;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2341 slcf->value_len = NGX_CONF_UNSET_SIZE;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2342
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2343 return slcf;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2344 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2345
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2346
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2347 static char *
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2348 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
2349 {
146
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2350 ngx_http_ssi_loc_conf_t *prev = parent;
36af50a5582d nginx 0.3.20
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
2351 ngx_http_ssi_loc_conf_t *conf = child;
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2352
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2353 ngx_str_t *type;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2354
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2355 ngx_conf_merge_value(conf->enable, prev->enable, 0);
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2356 ngx_conf_merge_value(conf->silent_errors, prev->silent_errors, 0);
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2357 ngx_conf_merge_value(conf->ignore_recycled_buffers,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
2358 prev->ignore_recycled_buffers, 0);
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2359
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2360 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
2361 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
2362
76
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2363 if (conf->types == NULL) {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2364 if (prev->types == NULL) {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2365 conf->types = ngx_array_create(cf->pool, 1, sizeof(ngx_str_t));
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2366 if (conf->types == NULL) {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2367 return NGX_CONF_ERROR;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2368 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2369
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2370 type = ngx_array_push(conf->types);
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2371 if (type == NULL) {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2372 return NGX_CONF_ERROR;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2373 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2374
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2375 type->len = sizeof("text/html") - 1;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2376 type->data = (u_char *) "text/html";
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2377
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2378 } else {
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2379 conf->types = prev->types;
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2380 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2381 }
da9a3b14312d nginx 0.1.38
Igor Sysoev <http://sysoev.ru>
parents: 62
diff changeset
2382
46
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2383 return NGX_CONF_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2384 }
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2385
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2386
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2387 static ngx_int_t
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2388 ngx_http_ssi_filter_init(ngx_cycle_t *cycle)
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2389 {
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2390 ngx_http_next_header_filter = ngx_http_top_header_filter;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2391 ngx_http_top_header_filter = ngx_http_ssi_header_filter;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2392
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2393 ngx_http_next_body_filter = ngx_http_top_body_filter;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2394 ngx_http_top_body_filter = ngx_http_ssi_body_filter;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2395
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2396 return NGX_OK;
9f3205d496a0 nginx 0.1.23
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2397 }