annotate src/http/modules/proxy/ngx_http_proxy_upstream.c @ 505:ee66921ecd47 release-0.1.27

nginx-0.1.27-RELEASE import *) Feature: the "blocked" parameter of the "valid_referers" directive. *) Change: the errors while handling the request header now logged at "info" level. The server name and the "Host" and "Referer" header lines also logged. *) Change: the "Host" header line is also logged in error log. *) Feature: the proxy_pass_unparsed_uri directive. The special handling of the "://" symbols in URI, appeared in 0.1.11 version, now is canceled. *) Bugfix: nginx could not be built on FreeBSD and Linux, if the --without-ngx_http_auth_basic_module configuration parameter was used.
author Igor Sysoev <igor@sysoev.ru>
date Mon, 28 Mar 2005 14:43:02 +0000
parents d4ea69372b94
children 9b8c906f6e63
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
4 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
5
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_event_connect.h>
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #include <ngx_event_pipe.h>
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #include <ngx_http.h>
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #include <ngx_http_proxy_handler.h>
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
16 static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_proxy_ctx_t *p);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
17 static void ngx_http_proxy_init_upstream(ngx_http_request_t *r);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
18 static void ngx_http_proxy_reinit_upstream(ngx_http_proxy_ctx_t *p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
19 static void ngx_http_proxy_connect(ngx_http_proxy_ctx_t *p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
20 static void ngx_http_proxy_send_request(ngx_http_proxy_ctx_t *p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
21 static void ngx_http_proxy_send_request_handler(ngx_event_t *wev);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
22 static void ngx_http_proxy_dummy_handler(ngx_event_t *wev);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
23 static void ngx_http_proxy_process_upstream_status_line(ngx_event_t *rev);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
24 static void ngx_http_proxy_process_upstream_headers(ngx_event_t *rev);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
25 static ssize_t ngx_http_proxy_read_upstream_header(ngx_http_proxy_ctx_t *);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
26 static void ngx_http_proxy_send_response(ngx_http_proxy_ctx_t *p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
27 static void ngx_http_proxy_process_body(ngx_event_t *ev);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
28 static void ngx_http_proxy_next_upstream(ngx_http_proxy_ctx_t *p,
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
29 ngx_uint_t ft_type);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
30
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
31
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
32 static ngx_str_t http_methods[] = {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
33 ngx_string("GET "),
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
34 ngx_string("HEAD "),
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
35 ngx_string("POST ")
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
36 };
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
37
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
38
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
39 static char *upstream_header_errors[] = {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
40 "upstream sent invalid header",
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
41 "upstream sent too long header line"
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
42 };
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
43
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
44
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
45 static char http_version[] = " HTTP/1.0" CRLF;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
46 static char host_header[] = "Host: ";
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
47 static char x_url_header[] = "X-URL: http";
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
48 static char x_real_ip_header[] = "X-Real-IP: ";
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
49 static char x_forwarded_for_header[] = "X-Forwarded-For: ";
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
50 static char connection_close_header[] = "Connection: close" CRLF;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
51
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
52
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
53 int ngx_http_proxy_request_upstream(ngx_http_proxy_ctx_t *p)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
54 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
55 int rc;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
56 ngx_http_request_t *r;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
57 ngx_http_proxy_upstream_t *u;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
58
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
59 r = p->request;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
60
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
61 u = ngx_pcalloc(r->pool, sizeof(ngx_http_proxy_upstream_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
62 if (u == NULL) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
63 return NGX_HTTP_INTERNAL_SERVER_ERROR;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
64 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
65
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
66 p->upstream = u;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
67
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
68 u->peer.log_error = NGX_ERROR_ERR;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
69 u->peer.peers = p->lcf->peers;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
70 u->peer.tries = p->lcf->peers->number;
377
41437e4fd9b4 nginx-0.0.7-2004-07-05-19:08:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 375
diff changeset
71 #if (NGX_THREADS)
41437e4fd9b4 nginx-0.0.7-2004-07-05-19:08:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 375
diff changeset
72 u->peer.lock = &r->connection->lock;
41437e4fd9b4 nginx-0.0.7-2004-07-05-19:08:23 import
Igor Sysoev <igor@sysoev.ru>
parents: 375
diff changeset
73 #endif
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
74
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
75 u->method = r->method;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
76
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
77 rc = ngx_http_read_client_request_body(r, ngx_http_proxy_init_upstream);
298
4a3f18406832 nginx-0.0.3-2004-03-30-10:27:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
78
4a3f18406832 nginx-0.0.3-2004-03-30-10:27:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
79 if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
4a3f18406832 nginx-0.0.3-2004-03-30-10:27:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
80 return rc;
4a3f18406832 nginx-0.0.3-2004-03-30-10:27:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
81 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
82
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
83 return NGX_DONE;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
84 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
85
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
86
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
87 static ngx_chain_t *ngx_http_proxy_create_request(ngx_http_proxy_ctx_t *p)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
88 {
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
89 size_t len;
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
90 ngx_uint_t i, escape, *index;
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
91 ngx_buf_t *b;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
92 ngx_chain_t *chain;
415
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
93 ngx_list_part_t *part;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
94 ngx_table_elt_t *header;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
95 ngx_http_request_t *r;
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
96 ngx_http_variable_t *var;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
97 ngx_http_variable_value_t *value;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
98 ngx_http_core_main_conf_t *cmcf;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
99 ngx_http_proxy_upstream_conf_t *uc;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
100
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
101 r = p->request;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
102 uc = p->lcf->upstream;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
103
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
104 #if (NGX_SUPPRESS_WARN)
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
105 var = NULL;
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
106 index = NULL;
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
107 #endif
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
108
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
109 escape = 0;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
110
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
111 if (p->upstream->method) {
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
112 len = http_methods[p->upstream->method - 1].len + uc->uri.len;
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
113
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
114 } else {
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
115 len = r->method_name.len + uc->uri.len;
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
116 }
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
117
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
118 if (p->lcf->pass_unparsed_uri && r->valid_unparsed_uri) {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
119 len += r->unparsed_uri.len - 1;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
120
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
121 } else {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
122 if (r->quoted_uri) {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
123 escape = 2 * ngx_escape_uri(NULL, r->uri.data + uc->location->len,
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
124 r->uri.len - uc->location->len,
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
125 NGX_ESCAPE_URI);
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
126 }
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
127
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
128 len += r->uri.len - uc->location->len + escape
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
129 + sizeof("?") - 1 + r->args.len;
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
130 }
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
131
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
132 len += sizeof(http_version) - 1
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
133 + sizeof(connection_close_header) - 1
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
134 + sizeof(CRLF) - 1;
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
135
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
136
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
137 if (p->lcf->set_x_url) {
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
138 len += sizeof(x_url_header) - 1
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
139 + sizeof("s://") - 1
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
140 + r->port_text->len
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
141 + r->unparsed_uri.len
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
142 + sizeof(CRLF) - 1;
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
143
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
144 if (r->headers_in.host) {
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
145 len += r->headers_in.host_name_len;
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
146
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
147 } else {
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
148 len += r->server_name.len;
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
149 }
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
150
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
151 }
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
152
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
153
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
154 if (p->lcf->preserve_host) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
155 if (r->headers_in.host) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
156 len += sizeof(host_header) - 1
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
157 + r->headers_in.host_name_len + sizeof(":") - 1
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
158 + uc->port_text.len + sizeof(CRLF) - 1;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
159
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
160 } else {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
161 len += sizeof(host_header) - 1
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
162 + r->server_name.len + sizeof(":") - 1
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
163 + uc->port_text.len + sizeof(CRLF) - 1;
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
164 }
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
165
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
166 } else {
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
167 len += sizeof(host_header) - 1 + uc->host_header.len
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
168 + sizeof(CRLF) - 1;
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
169 }
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
170
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
171
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
172 if (p->lcf->set_x_real_ip) {
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
173 len += sizeof(x_real_ip_header) - 1 + INET_ADDRSTRLEN - 1
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
174 + sizeof(CRLF) - 1;
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
175 }
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
176
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
177
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
178 if (p->lcf->add_x_forwarded_for) {
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
179 if (r->headers_in.x_forwarded_for) {
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
180 len += sizeof(x_forwarded_for_header) - 1
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
181 + r->headers_in.x_forwarded_for->value.len
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
182 + sizeof(", ") - 1 + INET_ADDRSTRLEN - 1 + sizeof(CRLF) - 1;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
183
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
184 } else {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
185 len += sizeof(x_forwarded_for_header) - 1 + INET_ADDRSTRLEN - 1
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
186 + sizeof(CRLF) - 1;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
187 }
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
188 }
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
189
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
190
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
191 if (p->lcf->x_vars) {
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
192 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
193
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
194 var = cmcf->variables.elts;
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
195 index = p->lcf->x_vars->elts;
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
196
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
197 for (i = 0; i < p->lcf->x_vars->nelts; i++) {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
198
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
199 value = ngx_http_get_indexed_variable(r, index[i]);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
200 if (value == NULL) {
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
201 continue;
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
202 }
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
203
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
204 if (value->text.len) {
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
205 len += sizeof("X-") - 1 + var[index[i]].name.len
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
206 + sizeof(": ") - 1 + value->text.len + sizeof(CRLF) - 1;
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
207 }
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
208 }
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
209 }
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
210
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
211
415
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
212 part = &r->headers_in.headers.part;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
213 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
214
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
215 for (i = 0; /* void */; i++) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
216
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
217 if (i >= part->nelts) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
218 if (part->next == NULL) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
219 break;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
220 }
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
221
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
222 part = part->next;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
223 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
224 i = 0;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
225 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
226
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
227 if (&header[i] == r->headers_in.host) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
228 continue;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
229 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
230
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
231 if (&header[i] == r->headers_in.connection) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
232 continue;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
233 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
234
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
235 len += header[i].key.len + sizeof(": ") - 1
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
236 + header[i].value.len + sizeof(CRLF) - 1;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
237 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
238
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
239 #if (NGX_DEBUG)
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
240 len++;
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
241 #endif
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
242
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
243 b = ngx_create_temp_buf(r->pool, len);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
244 if (b == NULL) {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
245 return NULL;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
246 }
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
247
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
248 chain = ngx_alloc_chain_link(r->pool);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
249 if (chain == NULL) {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
250 return NULL;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
251 }
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
252
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
253 chain->buf = b;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
254 chain->next = NULL;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
255
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
256
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
257 /* the request line */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
258
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
259 if (p->upstream->method) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
260 b->last = ngx_cpymem(b->last,
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
261 http_methods[p->upstream->method - 1].data,
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
262 http_methods[p->upstream->method - 1].len);
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
263 } else {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
264 b->last = ngx_cpymem(b->last, r->method_name.data, r->method_name.len);
314
d71c87d11b16 nginx-0.0.3-2004-04-14-09:57:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 313
diff changeset
265 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
266
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
267 b->last = ngx_cpymem(b->last, uc->uri.data, uc->uri.len);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
268
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
269 if (p->lcf->pass_unparsed_uri && r->valid_unparsed_uri) {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
270 b->last = ngx_cpymem(b->last, r->unparsed_uri.data + 1,
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
271 r->unparsed_uri.len - 1);
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
272 } else {
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
273 if (escape) {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
274 ngx_escape_uri(b->last, r->uri.data + uc->location->len,
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
275 r->uri.len - uc->location->len, NGX_ESCAPE_URI);
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
276 b->last += r->uri.len - uc->location->len + escape;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
277
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
278 } else {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
279 b->last = ngx_cpymem(b->last, r->uri.data + uc->location->len,
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
280 r->uri.len - uc->location->len);
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
281 }
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
282
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
283 if (r->args.len > 0) {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
284 *b->last++ = '?';
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
285 b->last = ngx_cpymem(b->last, r->args.data, r->args.len);
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
286 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
287 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
288
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
289 b->last = ngx_cpymem(b->last, http_version, sizeof(http_version) - 1);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
290
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
291
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
292 /* the "Connection: close" header */
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
293
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
294 b->last = ngx_cpymem(b->last, connection_close_header,
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
295 sizeof(connection_close_header) - 1);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
296
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
297
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
298 /* the "Host" header */
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
299
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
300 b->last = ngx_cpymem(b->last, host_header, sizeof(host_header) - 1);
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
301
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
302 if (p->lcf->preserve_host) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
303 if (r->headers_in.host) {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
304 b->last = ngx_cpymem(b->last, r->headers_in.host->value.data,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
305 r->headers_in.host_name_len);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
306 } else {
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
307 b->last = ngx_cpymem(b->last, r->server_name.data,
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
308 r->server_name.len);
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 487
diff changeset
309 }
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
310
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
311 if (!uc->default_port) {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
312 *b->last++ = ':';
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
313 b->last = ngx_cpymem(b->last, uc->port_text.data,
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
314 uc->port_text.len);
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
315 }
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
316
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
317 } else {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
318 b->last = ngx_cpymem(b->last, uc->host_header.data,
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
319 uc->host_header.len);
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
320 }
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
321 *b->last++ = CR; *b->last++ = LF;
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
322
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
323
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
324 /* the "X-URL" header */
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
325
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
326 if (p->lcf->set_x_url) {
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
327
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
328 b->last = ngx_cpymem(b->last, x_url_header,
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
329 sizeof(x_url_header) - 1);
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
330
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
331 #if (NGX_OPENSSL)
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
332
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
333 if (r->connection->ssl) {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
334 *b->last++ = 's';
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
335 }
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
336
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
337 #endif
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
338
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
339 *b->last++ = ':'; *b->last++ = '/'; *b->last++ = '/';
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
340
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
341 if (r->headers_in.host) {
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
342 b->last = ngx_cpymem(b->last, r->headers_in.host->value.data,
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
343 r->headers_in.host_name_len);
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
344 } else {
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
345 b->last = ngx_cpymem(b->last, r->server_name.data,
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
346 r->server_name.len);
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
347 }
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
348
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
349 b->last = ngx_cpymem(b->last, r->port_text->data, r->port_text->len);
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
350 b->last = ngx_cpymem(b->last, r->unparsed_uri.data,
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
351 r->unparsed_uri.len);
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
352
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
353 *b->last++ = CR; *b->last++ = LF;
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
354 }
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
355
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
356
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
357 /* the "X-Real-IP" header */
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
358
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
359 if (p->lcf->set_x_real_ip) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
360 b->last = ngx_cpymem(b->last, x_real_ip_header,
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
361 sizeof(x_real_ip_header) - 1);
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
362 b->last = ngx_cpymem(b->last, r->connection->addr_text.data,
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
363 r->connection->addr_text.len);
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
364 *b->last++ = CR; *b->last++ = LF;
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
365 }
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
366
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
367
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
368 /* the "X-Forwarded-For" header */
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
369
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
370 if (p->lcf->add_x_forwarded_for) {
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
371 if (r->headers_in.x_forwarded_for) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
372 b->last = ngx_cpymem(b->last, x_forwarded_for_header,
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
373 sizeof(x_forwarded_for_header) - 1);
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
374
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
375 b->last = ngx_cpymem(b->last,
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
376 r->headers_in.x_forwarded_for->value.data,
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
377 r->headers_in.x_forwarded_for->value.len);
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
378
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
379 *b->last++ = ','; *b->last++ = ' ';
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
380
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
381 } else {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
382 b->last = ngx_cpymem(b->last, x_forwarded_for_header,
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
383 sizeof(x_forwarded_for_header) - 1);
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
384 }
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
385
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
386 b->last = ngx_cpymem(b->last, r->connection->addr_text.data,
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
387 r->connection->addr_text.len);
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
388 *b->last++ = CR; *b->last++ = LF;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
389 }
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
390
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
391
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
392 if (p->lcf->x_vars) {
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
393 for (i = 0; i < p->lcf->x_vars->nelts; i++) {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
394
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
395 value = ngx_http_get_indexed_variable(r, index[i]);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
396 if (value == NULL) {
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
397 continue;
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
398 }
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
399
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
400 if (value->text.len == 0) {
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
401 continue;
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
402 }
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
403
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
404 *b->last++ = 'X'; *b->last++ = '-';
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
405
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
406 b->last = ngx_cpymem(b->last, var[index[i]].name.data,
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
407 var[index[i]].name.len);
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
408
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
409 *b->last++ = ':'; *b->last++ = ' ';
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
410
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
411 b->last = ngx_cpymem(b->last, value->text.data, value->text.len);
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
412
487
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
413 *b->last++ = CR; *b->last++ = LF;
31ff3e943e16 nginx-0.1.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
414 }
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
415 }
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
416
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
417
415
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
418 part = &r->headers_in.headers.part;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
419 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
420
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
421 for (i = 0; /* void */; i++) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
422
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
423 if (i >= part->nelts) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
424 if (part->next == NULL) {
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
425 break;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
426 }
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
427
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
428 part = part->next;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
429 header = part->elts;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
430 i = 0;
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 412
diff changeset
431 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
432
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
433 if (&header[i] == r->headers_in.host) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
434 continue;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
435 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
436
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
437 if (&header[i] == r->headers_in.connection) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
438 continue;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
439 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
440
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
441 if (&header[i] == r->headers_in.keep_alive) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
442 continue;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
443 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
444
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
445 if (&header[i] == r->headers_in.x_forwarded_for
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
446 && p->lcf->add_x_forwarded_for)
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
447 {
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
448 continue;
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
449 }
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
450
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
451 if (&header[i] == r->headers_in.x_real_ip && p->lcf->set_x_real_ip) {
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
452 continue;
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
453 }
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
454
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
455 if (&header[i] == r->headers_in.x_url && p->lcf->set_x_url) {
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
456 continue;
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
457 }
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
458
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
459 b->last = ngx_cpymem(b->last, header[i].key.data, header[i].key.len);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
460
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
461 *b->last++ = ':'; *b->last++ = ' ';
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
462
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
463 b->last = ngx_cpymem(b->last, header[i].value.data,
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
464 header[i].value.len);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
465
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
466 *b->last++ = CR; *b->last++ = LF;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
467
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
468 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
469 "http proxy header: \"%V: %V\"",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
470 &header[i].key, &header[i].value);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
471 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
472
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
473 /* add "\r\n" at the header end */
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
474 *b->last++ = CR; *b->last++ = LF;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
475
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
476 #if (NGX_DEBUG)
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
477 *b->last = '\0';
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
478 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
479 "http proxy header:\n\"%s\"", b->pos);
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
480 #endif
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
481
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
482 return chain;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
483 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
484
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
485
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
486 static void ngx_http_proxy_init_upstream(ngx_http_request_t *r)
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
487 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
488
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 190
diff changeset
489 ngx_chain_t *cl;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
490 ngx_http_proxy_ctx_t *p;
291
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
491 ngx_output_chain_ctx_t *output;
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
492 ngx_chain_writer_ctx_t *writer;
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
493 ngx_http_proxy_log_ctx_t *ctx;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
494
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
495 p = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
496
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
497 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
298
4a3f18406832 nginx-0.0.3-2004-03-30-10:27:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
498 "http proxy init upstream, client timer: %d",
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
499 r->connection->read->timer_set);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
500
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
501 if (r->connection->read->timer_set) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
502 ngx_del_timer(r->connection->read);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
503 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
504
298
4a3f18406832 nginx-0.0.3-2004-03-30-10:27:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
505 r->connection->read->event_handler = ngx_http_proxy_check_broken_connection;
4a3f18406832 nginx-0.0.3-2004-03-30-10:27:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 297
diff changeset
506
315
39b6f2df45c0 nginx-0.0.3-2004-04-14-21:44:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 314
diff changeset
507 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
188
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
508
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
509 r->connection->write->event_handler =
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
510 ngx_http_proxy_check_broken_connection;
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
511
313
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
512 if (!r->connection->write->active) {
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
513 if (ngx_add_event(r->connection->write, NGX_WRITE_EVENT,
188
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
514 NGX_CLEAR_EVENT) == NGX_ERROR)
313
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
515 {
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
516 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
517 return;
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
518 }
188
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
519 }
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
520 }
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
521
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
522
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
523 cl = ngx_http_proxy_create_request(p);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
524 if (cl == NULL) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
525 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
526 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
527 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
528
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
529 if (r->request_body->bufs) {
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
530 cl->next = r->request_body->bufs;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
531 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
532
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
533 r->request_body->bufs = cl;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
534
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
535 ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_proxy_log_ctx_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
536 if (ctx == NULL) {
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 190
diff changeset
537 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 190
diff changeset
538 return;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 190
diff changeset
539 }
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
540 ctx->connection = r->connection->number;
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
541 ctx->proxy = p;
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 190
diff changeset
542
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
543 p->upstream->peer.log = r->connection->log;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
544 p->saved_ctx = r->connection->log->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
545 p->saved_handler = r->connection->log->handler;
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
546 r->connection->log->data = ctx;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
547 r->connection->log->handler = ngx_http_proxy_log_error;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
548 p->action = "connecting to upstream";
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
549
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
550 output = ngx_pcalloc(r->pool, sizeof(ngx_output_chain_ctx_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
551 if (output == NULL) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
552 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
553 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
554 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
555
291
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
556 p->upstream->output_chain_ctx = output;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
557
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
558 output->sendfile = r->connection->sendfile;
291
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
559 output->pool = r->pool;
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
560 output->bufs.num = 1;
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
561 output->tag = (ngx_buf_tag_t) &ngx_http_proxy_module;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
562 output->output_filter = ngx_chain_writer;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
563
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
564 writer = ngx_palloc(r->pool, sizeof(ngx_chain_writer_ctx_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
565 if (writer == NULL) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
566 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
567 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
568 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
569
294
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
570 output->filter_ctx = writer;
291
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
571 writer->pool = r->pool;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
572
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
573 #if 0
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
574 if (p->lcf->busy_lock && p->busy_lock == NULL) {
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
575 #else
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
576 if (p->lcf->busy_lock && !p->busy_locked) {
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
577 #endif
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
578 ngx_http_proxy_upstream_busy_lock(p);
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
579 } else {
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
580 ngx_http_proxy_connect(p);
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
581 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
582 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
583
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
584
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
585 static void ngx_http_proxy_reinit_upstream(ngx_http_proxy_ctx_t *p)
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
586 {
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
587 ngx_chain_t *cl;
291
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
588 ngx_output_chain_ctx_t *output;
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
589 ngx_http_proxy_state_e state;
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
590
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
591 /* reinit the request chain */
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
592
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
593 for (cl = p->request->request_body->bufs; cl; cl = cl->next) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
594 cl->buf->pos = cl->buf->start;
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
595 cl->buf->file_pos = 0;
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
596 }
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
597
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
598 /* reinit the ngx_output_chain() context */
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
599
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
600 output = p->upstream->output_chain_ctx;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
601
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
602 output->buf = NULL;
291
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
603 output->in = NULL;
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
604 output->free = NULL;
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
605 output->busy = NULL;
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
606
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
607 /* reinit r->header_in buffer */
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
608
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
609 if (p->header_in) {
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
610 if (p->cache) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
611 p->header_in->pos = p->header_in->start + p->cache->ctx.header_size;
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
612 p->header_in->last = p->header_in->pos;
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
613
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
614 } else {
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
615 p->header_in->pos = p->header_in->start;
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
616 p->header_in->last = p->header_in->start;
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
617 }
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
618 }
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
619
177
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
620 /* add one more state */
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
621
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
622 state = p->state->cache_state;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
623
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
624 p->state = ngx_array_push(&p->states);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
625 if (p->state == NULL) {
177
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
626 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
627 return;
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
628 }
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
629
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
630 ngx_memzero(p->state, sizeof(ngx_http_proxy_state_t));
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
631
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
632 p->state->cache_state = state;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
633
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
634 p->status = 0;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
635 p->status_count = 0;
170
c42be4185301 nginx-0.0.1-2003-11-03-01:56:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
636 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
637
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
638
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
639 #if 0
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
640
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
641 void ngx_http_proxy_upstream_busy_lock(ngx_http_proxy_ctx_t *p)
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
642 {
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
643 ngx_int_t rc;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
644
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
645 rc = ngx_event_busy_lock(p->lcf->busy_lock, p->busy_lock);
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
646
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
647 if (rc == NGX_AGAIN) {
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
648 return;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
649 }
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
650
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
651 if (rc == NGX_OK) {
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
652 ngx_http_proxy_connect(p);
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
653 return;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
654 }
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
655
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
656 if (rc == NGX_ERROR) {
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
657 p->state->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
658 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
659 return;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
660 }
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
661
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
662 /* rc == NGX_BUSY */
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
663
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
664 #if (NGX_HTTP_CACHE)
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
665
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
666 if (p->busy_lock->timer) {
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
667 ft_type = NGX_HTTP_PROXY_FT_MAX_WAITING;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
668 } else {
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
669 ft_type = NGX_HTTP_PROXY_FT_BUSY_LOCK;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
670 }
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
671
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
672 if (p->stale && (p->lcf->use_stale & ft_type)) {
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
673 ngx_http_proxy_finalize_request(p,
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
674 ngx_http_proxy_send_cached_response(p));
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
675 return;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
676 }
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
677
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
678 #endif
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
679
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
680 p->state->status = NGX_HTTP_SERVICE_UNAVAILABLE;
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
681 ngx_http_proxy_finalize_request(p, NGX_HTTP_SERVICE_UNAVAILABLE);
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
682 }
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
683
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
684 #endif
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
685
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
686
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
687 #if 1
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
688
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
689 void ngx_http_proxy_upstream_busy_lock(ngx_http_proxy_ctx_t *p)
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
690 {
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
691 ngx_int_t rc;
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
692 #if (NGX_HTTP_CACHE)
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
693 ngx_int_t ft_type;
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
694 #endif
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
695
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
696 if (p->busy_lock.time == 0) {
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
697 p->busy_lock.event = p->request->connection->read;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
698 p->busy_lock.event_handler = ngx_http_proxy_busy_lock_handler;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
699 }
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
700
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
701 rc = ngx_http_busy_lock(p->lcf->busy_lock, &p->busy_lock);
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
702
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
703 if (rc == NGX_AGAIN) {
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
704 return;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
705 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
706
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
707 if (rc == NGX_OK) {
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
708 ngx_http_proxy_connect(p);
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
709 return;
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
710 }
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
711
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
712 ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
713
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
714 #if (NGX_HTTP_CACHE)
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
715
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
716 if (rc == NGX_DONE) {
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
717 ft_type = NGX_HTTP_PROXY_FT_BUSY_LOCK;
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
718
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
719 } else {
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
720 /* rc == NGX_ERROR */
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
721 ft_type = NGX_HTTP_PROXY_FT_MAX_WAITING;
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
722 }
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
723
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
724 if (p->stale && (p->lcf->use_stale & ft_type)) {
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
725 ngx_http_proxy_finalize_request(p,
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
726 ngx_http_proxy_send_cached_response(p));
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
727 return;
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
728 }
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
729
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
730 #endif
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
731
177
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
732 p->state->status = NGX_HTTP_SERVICE_UNAVAILABLE;
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
733 ngx_http_proxy_finalize_request(p, NGX_HTTP_SERVICE_UNAVAILABLE);
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
734 }
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
735
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
736 #endif
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
737
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
738
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
739 static void ngx_http_proxy_connect(ngx_http_proxy_ctx_t *p)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
740 {
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
741 ngx_int_t rc;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
742 ngx_connection_t *c;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
743 ngx_http_request_t *r;
291
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
744 ngx_output_chain_ctx_t *output;
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
745 ngx_chain_writer_ctx_t *writer;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
746
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
747 p->action = "connecting to upstream";
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
748
380
5ce6561246a5 nginx-0.0.7-2004-07-07-10:15:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 377
diff changeset
749 p->request->connection->single_connection = 0;
5ce6561246a5 nginx-0.0.7-2004-07-07-10:15:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 377
diff changeset
750
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
751 rc = ngx_event_connect_peer(&p->upstream->peer);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
752
313
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
753 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, p->request->connection->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
754 "http proxy connect: %i", rc);
313
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
755
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
756 if (rc == NGX_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
757 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
758 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
759 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
760
172
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
761 p->state->peer =
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
762 &p->upstream->peer.peers->peer[p->upstream->peer.cur_peer].name;
172
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
763
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
764 if (rc == NGX_CONNECT_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
765 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
766 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
767 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
768
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
769 r = p->request;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
770 c = p->upstream->peer.connection;
313
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
771
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
772 c->data = p;
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
773 c->write->event_handler = ngx_http_proxy_send_request_handler;
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
774 c->read->event_handler = ngx_http_proxy_process_upstream_status_line;
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
775
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
776 c->sendfile = r->connection->sendfile;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
777
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
778 c->pool = r->pool;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
779 c->read->log = c->write->log = c->log = r->connection->log;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
780
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
781 /* init or reinit the ngx_output_chain() and ngx_chain_writer() contexts */
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
782
291
117ccc7c4055 nginx-0.0.3-2004-03-16-16:35:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
783 output = p->upstream->output_chain_ctx;
294
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
784 writer = output->filter_ctx;
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
785 writer->out = NULL;
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
786 writer->last = &writer->out;
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
787 writer->connection = c;
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
788 writer->limit = 0;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
789
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
790 if (p->request_sent) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
791 ngx_http_proxy_reinit_upstream(p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
792 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
793
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
794 if (r->request_body->buf) {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
795 if (r->request_body->temp_file) {
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
796
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
797 output->free = ngx_alloc_chain_link(r->pool);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
798 if (output->free == NULL) {
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
799 ngx_http_proxy_finalize_request(p,
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
800 NGX_HTTP_INTERNAL_SERVER_ERROR);
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
801 return;
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
802 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
803
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
804 output->free->buf = r->request_body->buf;
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
805 output->free->next = NULL;
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
806 output->allocated = 1;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
807
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
808 r->request_body->buf->pos = r->request_body->buf->start;
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
809 r->request_body->buf->last = r->request_body->buf->start;
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
810 r->request_body->buf->tag = (ngx_buf_tag_t) &ngx_http_proxy_module;
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
811
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
812 } else {
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
813 r->request_body->buf->pos = r->request_body->buf->start;
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
814 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
815 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
816
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
817 p->request_sent = 0;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
818
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
819 if (rc == NGX_AGAIN) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
820 ngx_add_timer(c->write, p->lcf->connect_timeout);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
821 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
822 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
823
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
824 /* rc == NGX_OK */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
825
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
826 #if 0 /* test only, see below about "post aio operation" */
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
827
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
828 if (c->read->ready) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
829 /* post aio operation */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
830 ngx_http_proxy_process_upstream_status_line(c->read);
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
831 #if 0
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
832 return;
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
833 #endif
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
834 }
412
199cd29f35a3 nginx-0.0.10-2004-08-31-19:32:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
835
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
836 #endif
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
837
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
838 ngx_http_proxy_send_request(p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
839 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
840
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
841
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
842 static void ngx_http_proxy_send_request(ngx_http_proxy_ctx_t *p)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
843 {
292
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
844 int rc;
a472bfb778b3 nginx-0.0.3-2004-03-17-00:26:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 291
diff changeset
845 ngx_connection_t *c;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
846
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
847 c = p->upstream->peer.connection;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
848
313
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
849 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
850 "http proxy send request");
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
851
469
2ff194b74f1e nginx-0.1.9-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
852 #if (NGX_HAVE_KQUEUE)
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
853
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
854 if ((ngx_event_flags & NGX_USE_KQUEUE_EVENT)
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
855 && !p->request_sent
375
744ccb59062d nginx-0.0.7-2004-07-02-19:54:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
856 && c->write->pending_eof)
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
857 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
858 ngx_log_error(NGX_LOG_ERR, c->log, c->write->kq_errno,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
859 "connect() failed");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
860
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
861 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
862 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
863 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
864
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
865 #endif
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
866
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
867 p->action = "sending request to upstream";
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
868
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
869 rc = ngx_output_chain(p->upstream->output_chain_ctx,
297
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
870 p->request_sent ? NULL:
ee394e997c77 nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
871 p->request->request_body->bufs);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
872
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
873 p->request_sent = 1;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
874
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
875 if (rc == NGX_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
876 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
877 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
878 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
879
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
880 if (c->write->timer_set) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
881 ngx_del_timer(c->write);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
882 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
883
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
884 if (rc == NGX_AGAIN) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
885 ngx_add_timer(c->write, p->lcf->send_timeout);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
886
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
887 if (ngx_handle_write_event(c->write, p->lcf->send_lowat) == NGX_ERROR) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
888 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
889 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
890 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
891
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
892 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
893 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
894
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
895 /* rc == NGX_OK */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
896
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 343
diff changeset
897 if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
898 if (ngx_tcp_push(c->fd) == NGX_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
899 ngx_log_error(NGX_LOG_CRIT, c->log,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
900 ngx_socket_errno,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
901 ngx_tcp_push_n " failed");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
902 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
903 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
904 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
905
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 343
diff changeset
906 c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
907 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
908 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
909
189
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
910 ngx_add_timer(c->read, p->lcf->read_timeout);
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
911
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
912 #if 1
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
913 if (c->read->ready) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
914
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
915 /* post aio operation */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
916
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
917 /*
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
918 * although we can post aio operation just in the end
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
919 * of ngx_http_proxy_connect() CHECK IT !!!
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
920 * it's better to do here because we postpone header buffer allocation
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
921 */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
922
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
923 ngx_http_proxy_process_upstream_status_line(c->read);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
924 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
925 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
926 #endif
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
927
313
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
928 c->write->event_handler = ngx_http_proxy_dummy_handler;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
929
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
930 if (ngx_handle_level_write_event(c->write) == NGX_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
931 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
932 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
933 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
934 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
935
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
936
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
937 static void ngx_http_proxy_send_request_handler(ngx_event_t *wev)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
938 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
939 ngx_connection_t *c;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
940 ngx_http_proxy_ctx_t *p;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
941
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
942 c = wev->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
943 p = c->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
944
313
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
945 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0,
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
946 "http proxy send request handler");
98f1a8028067 nginx-0.0.3-2004-04-13-19:08:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 304
diff changeset
947
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
948 if (wev->timedout) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
949 p->action = "sending request to upstream";
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
950 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_TIMEOUT);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
951 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
952 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
953
189
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
954 if (p->request->connection->write->eof
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
955 && (!p->cachable || !p->request_sent))
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
956 {
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
957 ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST);
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
958 return;
188
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
959 }
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
960
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
961 ngx_http_proxy_send_request(p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
962 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
963
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
964
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
965 static void ngx_http_proxy_dummy_handler(ngx_event_t *wev)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
966 {
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
967 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0, "http proxy dummy handler");
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
968 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
969
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
970
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
971 static void ngx_http_proxy_process_upstream_status_line(ngx_event_t *rev)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
972 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
973 int rc;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
974 ssize_t n;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
975 ngx_connection_t *c;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
976 ngx_http_proxy_ctx_t *p;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
977
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
978 c = rev->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
979 p = c->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
980 p->action = "reading upstream status line";
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
981
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
982 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0,
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
983 "http proxy process status line");
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
984
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
985 if (rev->timedout) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
986 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_TIMEOUT);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
987 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
988 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
989
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
990 if (p->header_in == NULL) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
991 p->header_in = ngx_create_temp_buf(p->request->pool,
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
992 p->lcf->header_buffer_size);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
993 if (p->header_in == NULL) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
994 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
995 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
996 }
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
997 p->header_in->tag = (ngx_buf_tag_t) &ngx_http_proxy_module;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
998
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
999 if (p->cache) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1000 p->header_in->pos += p->cache->ctx.header_size;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1001 p->header_in->last = p->header_in->pos;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1002 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1003 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1004
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1005 n = ngx_http_proxy_read_upstream_header(p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1006
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1007 if (n == NGX_AGAIN) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1008 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1009 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1010
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1011 if (n == 0) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1012 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1013 "upstream prematurely closed connection");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1014 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1015
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1016 if (n == NGX_ERROR || n == 0) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1017 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1018 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1019 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1020
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
1021 p->valid_header_in = 0;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
1022
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1023 p->upstream->peer.cached = 0;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1024
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1025 rc = ngx_http_proxy_parse_status_line(p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1026
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1027 if (rc == NGX_AGAIN) {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1028 if (p->header_in->pos == p->header_in->end) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1029 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1030 "upstream sent too long status line");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1031 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_INVALID_HEADER);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1032 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1033 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1034 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1035
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1036 if (rc == NGX_HTTP_PROXY_PARSE_NO_HEADER) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1037 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1038 "upstream sent no valid HTTP/1.0 header");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1039
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1040 if (p->accel) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1041 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_INVALID_HEADER);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1042
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1043 } else {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1044 p->request->http_version = NGX_HTTP_VERSION_9;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1045 p->upstream->status = NGX_HTTP_OK;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1046 ngx_http_proxy_send_response(p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1047 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1048
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1049 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1050 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1051
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1052 /* rc == NGX_OK */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1053
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1054 p->upstream->status = p->status;
177
4db54fdbcbe7 nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
1055 p->state->status = p->status;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1056
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1057 if (p->status == NGX_HTTP_INTERNAL_SERVER_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1058
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1059 if (p->upstream->peer.tries > 1
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1060 && (p->lcf->next_upstream & NGX_HTTP_PROXY_FT_HTTP_500))
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1061 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1062 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_HTTP_500);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1063 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1064 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1065
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1066 #if (NGX_HTTP_CACHE)
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1067
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1068 if (p->upstream->peer.tries == 0
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1069 && p->stale
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1070 && (p->lcf->use_stale & NGX_HTTP_PROXY_FT_HTTP_500))
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1071 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1072 ngx_http_proxy_finalize_request(p,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1073 ngx_http_proxy_send_cached_response(p));
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1074
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1075 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1076 }
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1077
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1078 #endif
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1079 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1080
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1081 if (p->status == NGX_HTTP_NOT_FOUND
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1082 && p->upstream->peer.tries > 1
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1083 && p->lcf->next_upstream & NGX_HTTP_PROXY_FT_HTTP_404)
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1084 {
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1085 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_HTTP_404);
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1086 return;
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1087 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1088
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1089 /* TODO: "proxy_error_page" */
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1090
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1091 p->upstream->status_line.len = p->status_end - p->status_start;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1092 p->upstream->status_line.data = ngx_palloc(p->request->pool,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1093 p->upstream->status_line.len + 1);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1094 if (p->upstream->status_line.data == NULL) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1095 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1096 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1097 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1098 ngx_cpystrn(p->upstream->status_line.data, p->status_start,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1099 p->upstream->status_line.len + 1);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1100
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1101 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, rev->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1102 "http proxy status %ui \"%V\"",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1103 p->upstream->status, &p->upstream->status_line);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1104
294
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
1105
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
1106 /* init or reinit the p->upstream->headers_in.headers table */
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
1107
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1108 if (p->upstream->headers_in.headers.part.elts) {
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1109 p->upstream->headers_in.headers.part.nelts = 0;
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1110 p->upstream->headers_in.headers.part.next = NULL;
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1111 p->upstream->headers_in.headers.last =
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1112 &p->upstream->headers_in.headers.part;
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1113
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1114 ngx_memzero(&p->upstream->headers_in.date,
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1115 sizeof(ngx_http_proxy_headers_in_t) - sizeof(ngx_list_t));
294
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
1116
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1117 } else {
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1118 if (ngx_list_init(&p->upstream->headers_in.headers, p->request->pool,
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1119 20, sizeof(ngx_table_elt_t)) == NGX_ERROR)
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
1120 {
294
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
1121 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
1122 return;
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
1123 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1124 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1125
294
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
1126
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1127 c->read->event_handler = ngx_http_proxy_process_upstream_headers;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1128 ngx_http_proxy_process_upstream_headers(rev);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1129 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1130
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1131
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1132 static void ngx_http_proxy_process_upstream_headers(ngx_event_t *rev)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1133 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1134 int i, rc;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1135 ssize_t n;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1136 ngx_table_elt_t *h;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1137 ngx_connection_t *c;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1138 ngx_http_request_t *r;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1139 ngx_http_proxy_ctx_t *p;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1140
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1141 c = rev->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1142 p = c->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1143 r = p->request;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1144 p->action = "reading upstream headers";
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1145
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1146 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0,
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1147 "http proxy process header line");
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1148
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1149 if (rev->timedout) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1150 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_TIMEOUT);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1151 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1152 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1153
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1154 rc = NGX_AGAIN;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1155
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1156 for ( ;; ) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1157 if (rc == NGX_AGAIN) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1158 n = ngx_http_proxy_read_upstream_header(p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1159
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1160 if (n == 0) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1161 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1162 "upstream prematurely closed connection");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1163 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1164
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1165 if (n == NGX_ERROR || n == 0) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1166 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1167 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1168 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1169
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1170 if (n == NGX_AGAIN) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1171 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1172 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1173 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1174
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1175 rc = ngx_http_parse_header_line(p->request, p->header_in);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1176
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1177 if (rc == NGX_OK) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1178
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1179 /* a header line has been parsed successfully */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1180
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1181 h = ngx_list_push(&p->upstream->headers_in.headers);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1182 if (h == NULL) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1183 ngx_http_proxy_finalize_request(p,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1184 NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1185 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1186 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1187
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1188 h->key.len = r->header_name_end - r->header_name_start;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1189 h->value.len = r->header_end - r->header_start;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1190
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1191 h->key.data = ngx_palloc(p->request->pool,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1192 h->key.len + 1 + h->value.len + 1);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1193 if (h->key.data == NULL) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1194 ngx_http_proxy_finalize_request(p,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1195 NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1196 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1197 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1198
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1199 h->value.data = h->key.data + h->key.len + 1;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1200 ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1201 ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1202
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1203 for (i = 0; ngx_http_proxy_headers_in[i].name.len != 0; i++) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1204 if (ngx_http_proxy_headers_in[i].name.len != h->key.len) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1205 continue;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1206 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1207
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1208 if (ngx_strcasecmp(ngx_http_proxy_headers_in[i].name.data,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1209 h->key.data) == 0)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1210 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1211 *((ngx_table_elt_t **) ((char *) &p->upstream->headers_in
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1212 + ngx_http_proxy_headers_in[i].offset)) = h;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1213 break;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1214 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1215 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1216
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1217 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1218 "http proxy header: \"%V: %V\"", &h->key, &h->value);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1219
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1220 continue;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1221
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1222 } else if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1223
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1224 /* a whole header has been parsed successfully */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1225
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1226 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1227 "http proxy header done");
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1228
172
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1229 /* TODO: hook to process the upstream header */
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1230
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1231 #if (NGX_HTTP_CACHE)
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1232
172
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1233 if (p->cachable) {
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1234 p->cachable = ngx_http_proxy_is_cachable(p);
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1235 }
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1236
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1237 #endif
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1238
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1239 ngx_http_proxy_send_response(p);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1240 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1241
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1242 } else if (rc != NGX_AGAIN) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1243
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1244 /* there was error while a header line parsing */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1245
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1246 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1247 upstream_header_errors[rc - NGX_HTTP_PARSE_HEADER_ERROR]);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1248
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1249 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_INVALID_HEADER);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1250 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1251 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1252
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1253 /* rc == NGX_AGAIN: a header line parsing is still not complete */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1254
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1255 if (p->header_in->last == p->header_in->end) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1256 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1257 "upstream sent too big header");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1258
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1259 ngx_http_proxy_next_upstream(p, NGX_HTTP_PROXY_FT_INVALID_HEADER);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1260 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1261 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1262 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1263 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1264
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1265
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1266 static ssize_t ngx_http_proxy_read_upstream_header(ngx_http_proxy_ctx_t *p)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1267 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1268 ssize_t n;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1269 ngx_event_t *rev;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1270
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1271 rev = p->upstream->peer.connection->read;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1272
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1273 n = p->header_in->last - p->header_in->pos;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1274
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1275 if (n > 0) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1276 return n;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1277 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1278
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1279 n = ngx_recv(p->upstream->peer.connection, p->header_in->last,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1280 p->header_in->end - p->header_in->last);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1281
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1282 if (n == NGX_AGAIN) {
189
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
1283 #if 0
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1284 ngx_add_timer(rev, p->lcf->read_timeout);
189
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
1285 #endif
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1286
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1287 if (ngx_handle_read_event(rev, 0) == NGX_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1288 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1289 return NGX_ERROR;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1290 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1291
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1292 return NGX_AGAIN;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1293 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1294
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1295 if (n == 0) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1296 ngx_log_error(NGX_LOG_ERR, rev->log, 0,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1297 "upstream closed prematurely connection");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1298 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1299
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1300 if (n == 0 || n == NGX_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1301 return NGX_ERROR;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1302 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1303
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1304 p->header_in->last += n;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1305
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1306 return n;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1307 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1308
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1309
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1310 static void ngx_http_proxy_send_response(ngx_http_proxy_ctx_t *p)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1311 {
172
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1312 int rc;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1313 ngx_event_pipe_t *ep;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1314 ngx_http_request_t *r;
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
1315 ngx_http_cache_header_t *header;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1316 ngx_http_core_loc_conf_t *clcf;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1317
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1318 r = p->request;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1319
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1320 r->headers_out.status = p->upstream->status;
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1321 r->headers_out.status_line = p->upstream->status_line;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1322
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1323 #if 0
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1324 r->headers_out.content_length_n = -1;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1325 r->headers_out.content_length = NULL;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1326 #endif
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1327
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1328 /* copy an upstream header to r->headers_out */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1329
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1330 if (ngx_http_proxy_copy_header(p, &p->upstream->headers_in) == NGX_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1331 ngx_http_proxy_finalize_request(p, NGX_HTTP_INTERNAL_SERVER_ERROR);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1332 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1333 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1334
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 343
diff changeset
1335 /* TODO: preallocate event_pipe bufs, look "Content-Length" */
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1336
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1337 rc = ngx_http_send_header(r);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1338
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1339 if (rc == NGX_ERROR || rc > NGX_OK) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1340 ngx_http_proxy_finalize_request(p, rc);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1341 return;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1342 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1343
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1344 p->header_sent = 1;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1345
194
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 191
diff changeset
1346 if (p->cache && p->cache->ctx.file.fd != NGX_INVALID_FILE) {
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 191
diff changeset
1347 if (ngx_close_file(p->cache->ctx.file.fd) == NGX_FILE_ERROR) {
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 191
diff changeset
1348 ngx_log_error(NGX_LOG_ALERT, r->connection->log, ngx_errno,
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 191
diff changeset
1349 ngx_close_file_n " \"%s\" failed",
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 191
diff changeset
1350 p->cache->ctx.file.name.data);
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 191
diff changeset
1351 }
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 191
diff changeset
1352 }
2357fa41738a nginx-0.0.1-2003-11-21-09:30:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 191
diff changeset
1353
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
1354 if (p->cachable) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
1355 header = (ngx_http_cache_header_t *) p->header_in->start;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1356
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
1357 header->expires = p->cache->ctx.expires;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
1358 header->last_modified = p->cache->ctx.last_modified;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
1359 header->date = p->cache->ctx.date;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 172
diff changeset
1360 header->length = r->headers_out.content_length_n;
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1361 p->cache->ctx.length = r->headers_out.content_length_n;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1362
469
2ff194b74f1e nginx-0.1.9-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1363 header->key_len = p->cache->ctx.key0.len;
2ff194b74f1e nginx-0.1.9-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
1364 ngx_memcpy(&header->key, p->cache->ctx.key0.data, header->key_len);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1365 header->key[header->key_len] = LF;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1366 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1367
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1368 ep = ngx_pcalloc(r->pool, sizeof(ngx_event_pipe_t));
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1369 if (ep == NULL) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1370 ngx_http_proxy_finalize_request(p, 0);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1371 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1372 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1373
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1374 p->upstream->event_pipe = ep;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1375
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1376 ep->input_filter = ngx_event_pipe_copy_input_filter;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1377 ep->output_filter = (ngx_event_pipe_output_filter_pt)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1378 ngx_http_output_filter;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1379 ep->output_ctx = r;
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
1380 ep->tag = (ngx_buf_tag_t) &ngx_http_proxy_module;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1381 ep->bufs = p->lcf->bufs;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1382 ep->busy_size = p->lcf->busy_buffers_size;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1383 ep->upstream = p->upstream->peer.connection;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1384 ep->downstream = r->connection;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1385 ep->pool = r->pool;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1386 ep->log = r->connection->log;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1387
288
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
1388 ep->cachable = p->cachable;
f81d075ad172 nginx-0.0.2-2004-03-14-23:46:25 import
Igor Sysoev <igor@sysoev.ru>
parents: 287
diff changeset
1389
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1390 ep->temp_file = ngx_pcalloc(r->pool, sizeof(ngx_temp_file_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1391 if (ep->temp_file == NULL) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1392 ngx_http_proxy_finalize_request(p, 0);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1393 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1394 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1395
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1396 ep->temp_file->file.fd = NGX_INVALID_FILE;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1397 ep->temp_file->file.log = r->connection->log;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1398 ep->temp_file->path = p->lcf->temp_path;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1399 ep->temp_file->pool = r->pool;
303
00c5660d2707 nginx-0.0.3-2004-04-01-20:20:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 298
diff changeset
1400
00c5660d2707 nginx-0.0.3-2004-04-01-20:20:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 298
diff changeset
1401 if (p->cachable) {
00c5660d2707 nginx-0.0.3-2004-04-01-20:20:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 298
diff changeset
1402 ep->temp_file->persistent = 1;
00c5660d2707 nginx-0.0.3-2004-04-01-20:20:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 298
diff changeset
1403 } else {
188
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
1404 ep->temp_file->warn = "an upstream response is buffered "
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
1405 "to a temporary file";
0061d1f0908d nginx-0.0.1-2003-11-18-11:04:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 187
diff changeset
1406 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1407
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1408 ep->max_temp_file_size = p->lcf->max_temp_file_size;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1409 ep->temp_file_write_size = p->lcf->temp_file_write_size;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1410
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1411 ep->preread_bufs = ngx_alloc_chain_link(r->pool);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1412 if (ep->preread_bufs == NULL) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1413 ngx_http_proxy_finalize_request(p, 0);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1414 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1415 }
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
1416 ep->preread_bufs->buf = p->header_in;
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
1417 ep->preread_bufs->next = NULL;
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
1418 p->header_in->recycled = 1;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1419
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1420 ep->preread_size = p->header_in->last - p->header_in->pos;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1421
304
bcbe876f4262 nginx-0.0.3-2004-04-02-09:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 303
diff changeset
1422 if (p->cachable) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
1423 ep->buf_to_file = ngx_calloc_buf(r->pool);
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
1424 if (ep->buf_to_file == NULL) {
304
bcbe876f4262 nginx-0.0.3-2004-04-02-09:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 303
diff changeset
1425 ngx_http_proxy_finalize_request(p, 0);
bcbe876f4262 nginx-0.0.3-2004-04-02-09:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 303
diff changeset
1426 return;
bcbe876f4262 nginx-0.0.3-2004-04-02-09:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 303
diff changeset
1427 }
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
1428 ep->buf_to_file->pos = p->header_in->start;
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
1429 ep->buf_to_file->last = p->header_in->pos;
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
1430 ep->buf_to_file->temporary = 1;
187
5a9bbe99008b nginx-0.0.1-2003-11-17-19:15:03 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
1431 }
5a9bbe99008b nginx-0.0.1-2003-11-17-19:15:03 import
Igor Sysoev <igor@sysoev.ru>
parents: 178
diff changeset
1432
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1433 if (ngx_event_flags & NGX_USE_AIO_EVENT) {
195
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
1434 /* the posted aio operation can currupt a shadow buffer */
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1435 ep->single_buf = 1;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1436 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1437
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 315
diff changeset
1438 /* TODO: ep->free_bufs = 0 if use ngx_create_chain_of_bufs() */
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1439 ep->free_bufs = 1;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1440
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1441 /*
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1442 * event_pipe would do p->header_in->last += ep->preread_size
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1443 * as though these bytes were read.
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1444 */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1445 p->header_in->last = p->header_in->pos;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1446
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1447 if (p->lcf->cyclic_temp_file) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1448
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1449 /*
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1450 * we need to disable the use of sendfile() if we use cyclic temp file
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1451 * because the writing a new data can interfere with sendfile()
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1452 * that uses the same kernel file pages (at least on FreeBSD)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1453 */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1454
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1455 ep->cyclic_temp_file = 1;
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1456 r->connection->sendfile = 0;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1457
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1458 } else {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1459 ep->cyclic_temp_file = 0;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1460 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1461
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1462 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1463
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1464 ep->read_timeout = p->lcf->read_timeout;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1465 ep->send_timeout = clcf->send_timeout;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1466 ep->send_lowat = clcf->send_lowat;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1467
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1468 p->upstream->peer.connection->read->event_handler =
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1469 ngx_http_proxy_process_body;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1470 r->connection->write->event_handler = ngx_http_proxy_process_body;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1471
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1472 ngx_http_proxy_process_body(p->upstream->peer.connection->read);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1473
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1474 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1475 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1476
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1477
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1478 static void ngx_http_proxy_process_body(ngx_event_t *ev)
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1479 {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1480 ngx_connection_t *c;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1481 ngx_http_request_t *r;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1482 ngx_http_proxy_ctx_t *p;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1483 ngx_event_pipe_t *ep;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1484
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1485 c = ev->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1486
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1487 if (ev->write) {
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1488 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ev->log, 0,
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1489 "http proxy process downstream");
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1490 r = c->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1491 p = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1492 p->action = "sending to client";
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1493
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1494 } else {
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1495 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ev->log, 0,
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1496 "http proxy process upstream");
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1497 p = c->data;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1498 p->action = "reading upstream body";
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1499 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1500
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1501 ep = p->upstream->event_pipe;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1502
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1503 if (ev->timedout) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1504 if (ev->write) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1505 ep->downstream_error = 1;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1506 ngx_log_error(NGX_LOG_ERR, c->log, NGX_ETIMEDOUT,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1507 "client timed out");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1508
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1509 } else {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1510 ep->upstream_error = 1;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1511 ngx_log_error(NGX_LOG_ERR, c->log, NGX_ETIMEDOUT,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1512 "upstream timed out");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1513 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1514
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1515 } else {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1516 if (ngx_event_pipe(ep, ev->write) == NGX_ABORT) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1517 ngx_http_proxy_finalize_request(p, 0);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1518 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1519 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1520 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1521
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1522 if (p->upstream->peer.connection) {
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1523
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1524 #if (NGX_HTTP_FILE_CACHE)
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1525
172
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1526 if (ep->upstream_done && p->cachable) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1527 if (ngx_http_proxy_update_cache(p) == NGX_ERROR) {
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
1528 ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1529 ngx_http_proxy_finalize_request(p, 0);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1530 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1531 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1532
172
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1533 } else if (ep->upstream_eof && p->cachable) {
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1534
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1535 /* TODO: check length & update cache */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1536
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1537 if (ngx_http_proxy_update_cache(p) == NGX_ERROR) {
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
1538 ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1539 ngx_http_proxy_finalize_request(p, 0);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1540 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1541 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1542 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1543
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1544 #endif
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1545
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1546 if (ep->upstream_done || ep->upstream_eof || ep->upstream_error) {
293
ec3c049681fd nginx-0.0.3-2004-03-19-08:25:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 292
diff changeset
1547 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ev->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1548 "http proxy upstream exit: %p", ep->out);
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
1549 ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
195
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
1550 ngx_http_proxy_finalize_request(p, 0);
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
1551 return;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1552 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1553 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1554
195
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
1555 if (ep->downstream_error) {
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1556 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ev->log, 0,
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1557 "http proxy downstream error");
195
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
1558 if (!p->cachable && p->upstream->peer.connection) {
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
1559 ngx_http_proxy_finalize_request(p, 0);
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
1560 }
8dee38ea9117 nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 194
diff changeset
1561 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1562 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1563
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1564
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1565 static void ngx_http_proxy_next_upstream(ngx_http_proxy_ctx_t *p,
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1566 ngx_uint_t ft_type)
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1567 {
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1568 ngx_uint_t status;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1569
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 195
diff changeset
1570 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, p->request->connection->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1571 "http proxy next upstream: %ui", ft_type);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1572
178
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
1573 ngx_http_busy_unlock(p->lcf->busy_lock, &p->busy_lock);
a8ff48d26cca nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 177
diff changeset
1574
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1575 if (ft_type != NGX_HTTP_PROXY_FT_HTTP_404) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1576 ngx_event_connect_peer_failed(&p->upstream->peer);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1577 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1578
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1579 if (ft_type == NGX_HTTP_PROXY_FT_TIMEOUT) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1580 ngx_log_error(NGX_LOG_ERR, p->request->connection->log, NGX_ETIMEDOUT,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1581 "upstream timed out");
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1582 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1583
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1584 if (p->upstream->peer.cached && ft_type == NGX_HTTP_PROXY_FT_ERROR) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1585 status = 0;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1586
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1587 } else {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1588 switch(ft_type) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1589 case NGX_HTTP_PROXY_FT_TIMEOUT:
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1590 status = NGX_HTTP_GATEWAY_TIME_OUT;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1591 break;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1592
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1593 case NGX_HTTP_PROXY_FT_HTTP_500:
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1594 status = NGX_HTTP_INTERNAL_SERVER_ERROR;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1595 break;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1596
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1597 case NGX_HTTP_PROXY_FT_HTTP_404:
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1598 status = NGX_HTTP_NOT_FOUND;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1599 break;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1600
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1601 /*
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1602 * NGX_HTTP_PROXY_FT_BUSY_LOCK and NGX_HTTP_PROXY_FT_MAX_WAITING
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1603 * never reach here
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1604 */
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1605
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1606 default:
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1607 status = NGX_HTTP_BAD_GATEWAY;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1608 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1609 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1610
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1611 if (p->upstream->peer.connection) {
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
1612 ngx_http_proxy_close_connection(p);
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1613 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1614
189
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
1615 if (p->request->connection->write->eof) {
190
02a715e85df1 nginx-0.0.1-2003-11-19-00:34:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 189
diff changeset
1616 ngx_http_proxy_finalize_request(p, NGX_HTTP_CLIENT_CLOSED_REQUEST);
02a715e85df1 nginx-0.0.1-2003-11-19-00:34:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 189
diff changeset
1617 return;
189
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
1618 }
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 188
diff changeset
1619
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1620 if (status) {
172
caa57ddf6d77 nginx-0.0.1-2003-11-04-01:20:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 171
diff changeset
1621 p->state->status = status;
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1622
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1623 if (p->upstream->peer.tries == 0 || !(p->lcf->next_upstream & ft_type))
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1624 {
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1625
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1626 #if (NGX_HTTP_CACHE)
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1627
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1628 if (p->stale && (p->lcf->use_stale & ft_type)) {
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1629 ngx_http_proxy_finalize_request(p,
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1630 ngx_http_proxy_send_cached_response(p));
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1631 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1632 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1633
287
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1634 #endif
35a6a9df2d25 nginx-0.0.2-2004-03-12-19:57:08 import
Igor Sysoev <igor@sysoev.ru>
parents: 257
diff changeset
1635
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1636 ngx_http_proxy_finalize_request(p, status);
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1637 return;
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1638 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1639 }
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1640
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1641 if (p->lcf->busy_lock && !p->busy_locked) {
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
1642 ngx_http_proxy_upstream_busy_lock(p);
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
1643 } else {
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
1644 ngx_http_proxy_connect(p);
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
1645 }
171
aff0e5d32af8 nginx-0.0.1-2003-11-03-20:33:31 import
Igor Sysoev <igor@sysoev.ru>
parents: 170
diff changeset
1646 }