comparison src/http/modules/ngx_http_ssi_filter_module.c @ 394:34fb3a573548 NGINX_0_7_8

nginx 0.7.8 *) Feature: the ngx_http_xslt_module. *) Feature: the "$arg_..." variables. *) Feature: Solaris directio support. Thanks to Ivan Debnar. *) Bugfix: now if FastCGI server sends a "Location" header line without status line, then nginx uses 302 status code. Thanks to Maxim Dounin.
author Igor Sysoev <http://sysoev.ru>
date Mon, 04 Aug 2008 00:00:00 +0400
parents 1172e6d6f40f
children 05981f639d21
comparison
equal deleted inserted replaced
393:4ec606a899d3 394:34fb3a573548
1603 { 1603 {
1604 u_char ch, *p, **value, *data, *part_data; 1604 u_char ch, *p, **value, *data, *part_data;
1605 size_t *size, len, prefix, part_len; 1605 size_t *size, len, prefix, part_len;
1606 ngx_str_t var, *val; 1606 ngx_str_t var, *val;
1607 ngx_int_t key; 1607 ngx_int_t key;
1608 ngx_uint_t i, j, n, bracket, quoted; 1608 ngx_uint_t i, n, bracket, quoted;
1609 ngx_array_t lengths, values; 1609 ngx_array_t lengths, values;
1610 ngx_http_variable_value_t *vv; 1610 ngx_http_variable_value_t *vv;
1611 1611
1612 n = ngx_http_script_variables_count(text); 1612 n = ngx_http_script_variables_count(text);
1613 1613
1729 1729
1730 if (var.len == 0) { 1730 if (var.len == 0) {
1731 goto invalid_variable; 1731 goto invalid_variable;
1732 } 1732 }
1733 1733
1734 key = 0; 1734 key = ngx_hash_strlow(var.data, var.data, var.len);
1735
1736 for (j = 0; j < var.len; j++) {
1737 var.data[j] = ngx_tolower(var.data[j]);
1738 key = ngx_hash(key, var.data[j]);
1739 }
1740 1735
1741 val = ngx_http_ssi_get_variable(r, &var, key); 1736 val = ngx_http_ssi_get_variable(r, &var, key);
1742 1737
1743 if (val == NULL) { 1738 if (val == NULL) {
1744 vv = ngx_http_get_variable(r, &var, key, 1739 vv = ngx_http_get_variable(r, &var, key,
2023 psr->data = bl[i].bufs; 2018 psr->data = bl[i].bufs;
2024 } 2019 }
2025 } 2020 }
2026 2021
2027 if (set) { 2022 if (set) {
2028 key = 0; 2023 key = ngx_hash_strlow(set->data, set->data, set->len);
2029
2030 for (i = 0; i < set->len; i++) {
2031 set->data[i] = ngx_tolower(set->data[i]);
2032 key = ngx_hash(key, set->data[i]);
2033 }
2034 2024
2035 psr = ngx_palloc(r->pool, sizeof(ngx_http_post_subrequest_t)); 2025 psr = ngx_palloc(r->pool, sizeof(ngx_http_post_subrequest_t));
2036 if (psr == NULL) { 2026 if (psr == NULL) {
2037 return NGX_ERROR; 2027 return NGX_ERROR;
2038 } 2028 }
2139 ngx_str_t **params) 2129 ngx_str_t **params)
2140 { 2130 {
2141 u_char *p; 2131 u_char *p;
2142 uintptr_t len; 2132 uintptr_t len;
2143 ngx_int_t key; 2133 ngx_int_t key;
2144 ngx_uint_t i;
2145 ngx_buf_t *b; 2134 ngx_buf_t *b;
2146 ngx_str_t *var, *value, *enc, text; 2135 ngx_str_t *var, *value, *enc, text;
2147 ngx_chain_t *cl; 2136 ngx_chain_t *cl;
2148 ngx_http_variable_value_t *vv; 2137 ngx_http_variable_value_t *vv;
2149 2138
2150 var = params[NGX_HTTP_SSI_ECHO_VAR]; 2139 var = params[NGX_HTTP_SSI_ECHO_VAR];
2151 2140
2152 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, 2141 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
2153 "ssi echo \"%V\"", var); 2142 "ssi echo \"%V\"", var);
2154 2143
2155 key = 0; 2144 key = ngx_hash_strlow(var->data, var->data, var->len);
2156
2157 for (i = 0; i < var->len; i++) {
2158 var->data[i] = ngx_tolower(var->data[i]);
2159 key = ngx_hash(key, var->data[i]);
2160 }
2161 2145
2162 value = ngx_http_ssi_get_variable(r, var, key); 2146 value = ngx_http_ssi_get_variable(r, var, key);
2163 2147
2164 if (value == NULL) { 2148 if (value == NULL) {
2165 vv = ngx_http_get_variable(r, var, key, 1); 2149 vv = ngx_http_get_variable(r, var, key, 1);
2308 static ngx_int_t 2292 static ngx_int_t
2309 ngx_http_ssi_set(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx, 2293 ngx_http_ssi_set(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
2310 ngx_str_t **params) 2294 ngx_str_t **params)
2311 { 2295 {
2312 ngx_int_t key, rc; 2296 ngx_int_t key, rc;
2313 ngx_uint_t i;
2314 ngx_str_t *name, *value, *vv; 2297 ngx_str_t *name, *value, *vv;
2315 ngx_http_ssi_var_t *var; 2298 ngx_http_ssi_var_t *var;
2316 ngx_http_ssi_ctx_t *mctx; 2299 ngx_http_ssi_ctx_t *mctx;
2317 2300
2318 mctx = ngx_http_get_module_ctx(r->main, ngx_http_ssi_filter_module); 2301 mctx = ngx_http_get_module_ctx(r->main, ngx_http_ssi_filter_module);
2335 2318
2336 if (rc != NGX_OK) { 2319 if (rc != NGX_OK) {
2337 return rc; 2320 return rc;
2338 } 2321 }
2339 2322
2340 key = 0; 2323 key = ngx_hash_strlow(name->data, name->data, name->len);
2341
2342 for (i = 0; i < name->len; i++) {
2343 name->data[i] = ngx_tolower(name->data[i]);
2344 key = ngx_hash(key, name->data[i]);
2345 }
2346 2324
2347 vv = ngx_http_ssi_get_variable(r, name, key); 2325 vv = ngx_http_ssi_get_variable(r, name, key);
2348 2326
2349 if (vv) { 2327 if (vv) {
2350 *vv = *value; 2328 *vv = *value;