comparison src/http/ngx_http_variables.c @ 296:2ceaee987f37 NGINX_0_5_18

nginx 0.5.18 *) Feature: the ngx_http_sub_filter_module. *) Feature: the "$upstream_http_..." variables. *) Feature: now the $upstream_status and $upstream_response_time variables keep data about all upstreams before X-Accel-Redirect. *) Bugfix: a segmentation fault occurred in master process after first reconfiguration and receiving any signal if nginx was built with ngx_http_perl_module and perl did not support multiplicity; bug appeared in 0.5.9. *) Bugfix: if perl did not support multiplicity, then after reconfiguration perl code did not work; bug appeared in 0.3.38.
author Igor Sysoev <http://sysoev.ru>
date Thu, 19 Apr 2007 00:00:00 +0400
parents 27d9d1f26b38
children cba14c1e2a4b
comparison
equal deleted inserted replaced
295:65b7ac8795e3 296:2ceaee987f37
21 21
22 static ngx_int_t ngx_http_variable_unknown_header_in(ngx_http_request_t *r, 22 static ngx_int_t ngx_http_variable_unknown_header_in(ngx_http_request_t *r,
23 ngx_http_variable_value_t *v, uintptr_t data); 23 ngx_http_variable_value_t *v, uintptr_t data);
24 static ngx_int_t ngx_http_variable_unknown_header_out(ngx_http_request_t *r, 24 static ngx_int_t ngx_http_variable_unknown_header_out(ngx_http_request_t *r,
25 ngx_http_variable_value_t *v, uintptr_t data); 25 ngx_http_variable_value_t *v, uintptr_t data);
26 static ngx_int_t ngx_http_variable_unknown_header(ngx_http_variable_value_t *v,
27 ngx_str_t *var, ngx_list_part_t *part, size_t prefix);
28 26
29 static ngx_int_t ngx_http_variable_host(ngx_http_request_t *r, 27 static ngx_int_t ngx_http_variable_host(ngx_http_request_t *r,
30 ngx_http_variable_value_t *v, uintptr_t data); 28 ngx_http_variable_value_t *v, uintptr_t data);
31 static ngx_int_t ngx_http_variable_binary_remote_addr(ngx_http_request_t *r, 29 static ngx_int_t ngx_http_variable_binary_remote_addr(ngx_http_request_t *r,
32 ngx_http_variable_value_t *v, uintptr_t data); 30 ngx_http_variable_value_t *v, uintptr_t data);
449 } 447 }
450 448
451 return NULL; 449 return NULL;
452 } 450 }
453 451
452 if (ngx_strncmp(name->data, "upstream_http_", 10) == 0) {
453
454 if (ngx_http_upstream_header_variable(r, vv, (uintptr_t) name)
455 == NGX_OK)
456 {
457 return vv;
458 }
459
460 return NULL;
461 }
462
454 vv->not_found = 1; 463 vv->not_found = 1;
455 464
456 if (nowarn == 0) { 465 if (nowarn == 0) {
457 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, 466 ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
458 "unknown \"%V\" variable", name); 467 "unknown \"%V\" variable", name);
612 &r->headers_out.headers.part, 621 &r->headers_out.headers.part,
613 sizeof("sent_http_") - 1); 622 sizeof("sent_http_") - 1);
614 } 623 }
615 624
616 625
617 static ngx_int_t 626 ngx_int_t
618 ngx_http_variable_unknown_header(ngx_http_variable_value_t *v, ngx_str_t *var, 627 ngx_http_variable_unknown_header(ngx_http_variable_value_t *v, ngx_str_t *var,
619 ngx_list_part_t *part, size_t prefix) 628 ngx_list_part_t *part, size_t prefix)
620 { 629 {
621 u_char ch; 630 u_char ch;
622 ngx_uint_t i, n; 631 ngx_uint_t i, n;
1286 } 1295 }
1287 1296
1288 if (ngx_strncmp(v[i].name.data, "sent_http_", 10) == 0) { 1297 if (ngx_strncmp(v[i].name.data, "sent_http_", 10) == 0) {
1289 v[i].get_handler = ngx_http_variable_unknown_header_out; 1298 v[i].get_handler = ngx_http_variable_unknown_header_out;
1290 v[i].data = (uintptr_t) &v[i].name; 1299 v[i].data = (uintptr_t) &v[i].name;
1300
1301 continue;
1302 }
1303
1304 if (ngx_strncmp(v[i].name.data, "upstream_http_", 14) == 0) {
1305 v[i].get_handler = ngx_http_upstream_header_variable;
1306 v[i].data = (uintptr_t) &v[i].name;
1307 v[i].flags = NGX_HTTP_VAR_NOCACHABLE;
1291 1308
1292 continue; 1309 continue;
1293 } 1310 }
1294 1311
1295 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, 1312 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,