Mercurial > hg > nginx-vendor-1-0
comparison src/http/ngx_http_variables.c @ 324:f7cd062ee035 NGINX_0_6_6
nginx 0.6.6
*) Feature: the --sysconfdir=PATH option in configure.
*) Feature: named locations.
*) Feature: the $args variable can be set with the "set" directive.
*) Feature: the $is_args variable.
*) Bugfix: fair big weight upstream balancer.
*) Bugfix: if a client has closed connection to mail proxy then nginx
might not close connection to backend.
*) Bugfix: if the same host without specified port was used as backend
for HTTP and HTTPS, then nginx used only one port - 80 or 443.
*) Bugfix: fix building on Solaris/amd64 by Sun Studio 11 and early
versions; bug appeared in 0.6.4.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 30 Jul 2007 00:00:00 +0400 |
parents | d16d691432c9 |
children | 10cc350ed8a1 |
comparison
equal
deleted
inserted
replaced
323:7e977a664d91 | 324:f7cd062ee035 |
---|---|
11 #include <nginx.h> | 11 #include <nginx.h> |
12 | 12 |
13 | 13 |
14 static ngx_int_t ngx_http_variable_request(ngx_http_request_t *r, | 14 static ngx_int_t ngx_http_variable_request(ngx_http_request_t *r, |
15 ngx_http_variable_value_t *v, uintptr_t data); | 15 ngx_http_variable_value_t *v, uintptr_t data); |
16 static void ngx_http_variable_request_set(ngx_http_request_t *r, | |
17 ngx_http_variable_value_t *v, uintptr_t data); | |
16 static void ngx_http_variable_request_set_size(ngx_http_request_t *r, | 18 static void ngx_http_variable_request_set_size(ngx_http_request_t *r, |
17 ngx_http_variable_value_t *v, uintptr_t data); | 19 ngx_http_variable_value_t *v, uintptr_t data); |
18 static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r, | 20 static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r, |
19 ngx_http_variable_value_t *v, uintptr_t data); | 21 ngx_http_variable_value_t *v, uintptr_t data); |
20 static ngx_int_t ngx_http_variable_headers(ngx_http_request_t *r, | 22 static ngx_int_t ngx_http_variable_headers(ngx_http_request_t *r, |
36 static ngx_int_t ngx_http_variable_server_addr(ngx_http_request_t *r, | 38 static ngx_int_t ngx_http_variable_server_addr(ngx_http_request_t *r, |
37 ngx_http_variable_value_t *v, uintptr_t data); | 39 ngx_http_variable_value_t *v, uintptr_t data); |
38 static ngx_int_t ngx_http_variable_server_port(ngx_http_request_t *r, | 40 static ngx_int_t ngx_http_variable_server_port(ngx_http_request_t *r, |
39 ngx_http_variable_value_t *v, uintptr_t data); | 41 ngx_http_variable_value_t *v, uintptr_t data); |
40 static ngx_int_t ngx_http_variable_scheme(ngx_http_request_t *r, | 42 static ngx_int_t ngx_http_variable_scheme(ngx_http_request_t *r, |
43 ngx_http_variable_value_t *v, uintptr_t data); | |
44 static ngx_int_t ngx_http_variable_is_args(ngx_http_request_t *r, | |
41 ngx_http_variable_value_t *v, uintptr_t data); | 45 ngx_http_variable_value_t *v, uintptr_t data); |
42 static ngx_int_t ngx_http_variable_document_root(ngx_http_request_t *r, | 46 static ngx_int_t ngx_http_variable_document_root(ngx_http_request_t *r, |
43 ngx_http_variable_value_t *v, uintptr_t data); | 47 ngx_http_variable_value_t *v, uintptr_t data); |
44 static ngx_int_t ngx_http_variable_request_filename(ngx_http_request_t *r, | 48 static ngx_int_t ngx_http_variable_request_filename(ngx_http_request_t *r, |
45 ngx_http_variable_value_t *v, uintptr_t data); | 49 ngx_http_variable_value_t *v, uintptr_t data); |
153 | 157 |
154 { ngx_string("query_string"), NULL, ngx_http_variable_request, | 158 { ngx_string("query_string"), NULL, ngx_http_variable_request, |
155 offsetof(ngx_http_request_t, args), | 159 offsetof(ngx_http_request_t, args), |
156 NGX_HTTP_VAR_NOCACHABLE, 0 }, | 160 NGX_HTTP_VAR_NOCACHABLE, 0 }, |
157 | 161 |
158 { ngx_string("args"), NULL, ngx_http_variable_request, | 162 { ngx_string("args"), |
163 ngx_http_variable_request_set, | |
164 ngx_http_variable_request, | |
159 offsetof(ngx_http_request_t, args), | 165 offsetof(ngx_http_request_t, args), |
160 NGX_HTTP_VAR_NOCACHABLE, 0 }, | 166 NGX_HTTP_VAR_CHANGABLE|NGX_HTTP_VAR_NOCACHABLE, 0 }, |
167 | |
168 { ngx_string("is_args"), NULL, ngx_http_variable_is_args, | |
169 0, NGX_HTTP_VAR_NOCACHABLE, 0 }, | |
161 | 170 |
162 { ngx_string("request_filename"), NULL, | 171 { ngx_string("request_filename"), NULL, |
163 ngx_http_variable_request_filename, 0, | 172 ngx_http_variable_request_filename, 0, |
164 NGX_HTTP_VAR_NOCACHABLE, 0 }, | 173 NGX_HTTP_VAR_NOCACHABLE, 0 }, |
165 | 174 |
499 return NGX_OK; | 508 return NGX_OK; |
500 } | 509 } |
501 | 510 |
502 | 511 |
503 static void | 512 static void |
513 ngx_http_variable_request_set(ngx_http_request_t *r, | |
514 ngx_http_variable_value_t *v, uintptr_t data) | |
515 { | |
516 ngx_str_t *s; | |
517 | |
518 s = (ngx_str_t *) ((char *) r + data); | |
519 | |
520 s->len = v->len; | |
521 s->data = v->data; | |
522 } | |
523 | |
524 | |
525 static void | |
504 ngx_http_variable_request_set_size(ngx_http_request_t *r, | 526 ngx_http_variable_request_set_size(ngx_http_request_t *r, |
505 ngx_http_variable_value_t *v, uintptr_t data) | 527 ngx_http_variable_value_t *v, uintptr_t data) |
506 { | 528 { |
507 ssize_t s, *sp; | 529 ssize_t s, *sp; |
508 ngx_str_t val; | 530 ngx_str_t val; |
858 return NGX_OK; | 880 return NGX_OK; |
859 } | 881 } |
860 | 882 |
861 | 883 |
862 static ngx_int_t | 884 static ngx_int_t |
885 ngx_http_variable_is_args(ngx_http_request_t *r, | |
886 ngx_http_variable_value_t *v, uintptr_t data) | |
887 { | |
888 v->valid = 1; | |
889 v->no_cachable = 0; | |
890 v->not_found = 0; | |
891 | |
892 if (r->args.len == 0) { | |
893 v->len = 0; | |
894 v->data = NULL; | |
895 return NGX_OK; | |
896 } | |
897 | |
898 v->len = 1; | |
899 v->data = (u_char *) "?"; | |
900 | |
901 return NGX_OK; | |
902 } | |
903 | |
904 | |
905 static ngx_int_t | |
863 ngx_http_variable_document_root(ngx_http_request_t *r, | 906 ngx_http_variable_document_root(ngx_http_request_t *r, |
864 ngx_http_variable_value_t *v, uintptr_t data) | 907 ngx_http_variable_value_t *v, uintptr_t data) |
865 { | 908 { |
866 ngx_str_t path; | 909 ngx_str_t path; |
867 ngx_http_core_loc_conf_t *clcf; | 910 ngx_http_core_loc_conf_t *clcf; |
881 == NULL) | 924 == NULL) |
882 { | 925 { |
883 return NGX_ERROR; | 926 return NGX_ERROR; |
884 } | 927 } |
885 | 928 |
886 if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &path) == NGX_ERROR) { | 929 if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &path, 0) |
930 == NGX_ERROR) | |
931 { | |
887 return NGX_ERROR; | 932 return NGX_ERROR; |
888 } | 933 } |
889 | 934 |
890 v->len = path.len; | 935 v->len = path.len; |
891 v->valid = 1; | 936 v->valid = 1; |