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;