Mercurial > hg > nginx-quic
annotate src/os/win32/ngx_process_cycle.c @ 483:621229427cba release-0.1.16
nginx-0.1.16-RELEASE import
*) Bugfix: if the response were transferred by chunks, then on the HEAD
request the final chunk was issued.
*) Bugfix: the "Connection: keep-alive" header were issued, even if the
keepalive_timeout directive forbade the keep-alive use.
*) Bugfix: the errors in the ngx_http_fastcgi_module caused the
segmentation faults.
*) Bugfix: the compressed response encrypted by SSL may not transferred
complete.
*) Bugfix: the TCP-specific TCP_NODELAY, TCP_NOPSUH, and TCP_CORK
options, are not used for the unix domain sockets.
*) Feature: the rewrite directive supports the arguments rewriting.
*) Bugfix: the response code 400 was returned for the POST request with
the "Content-Length: 0" header; the bug had appeared in 0.1.14.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 25 Jan 2005 12:27:35 +0000 |
parents | a88a3e4e158f |
children | d4ea69372b94 |
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:
368
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:
368
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:
368
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:
368
diff
changeset
|
5 |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
6 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
7 #include <ngx_config.h> |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
8 #include <ngx_core.h> |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
9 #include <ngx_event.h> |
461 | 10 #include <nginx.h> |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
11 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
12 |
461 | 13 static void *ngx_worker_thread_cycle(void *data); |
14 static long __stdcall ngx_window_procedure(HWND window, u_int message, | |
15 u_int wparam, long lparam); | |
16 | |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
17 #if 0 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
18 ngx_pid_t ngx_new_binary; |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
19 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
20 sig_atomic_t ngx_reap; |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
21 sig_atomic_t ngx_timer; |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
282
diff
changeset
|
22 |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
282
diff
changeset
|
23 #endif |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
282
diff
changeset
|
24 |
326
8733703a37f3
nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
324
diff
changeset
|
25 ngx_uint_t ngx_process; |
8733703a37f3
nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
324
diff
changeset
|
26 ngx_pid_t ngx_pid; |
8733703a37f3
nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
324
diff
changeset
|
27 ngx_uint_t ngx_threaded; |
368
15c84a40e87d
nginx-0.0.7-2004-06-24-20:07:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
326
diff
changeset
|
28 ngx_uint_t ngx_inherited; |
15c84a40e87d
nginx-0.0.7-2004-06-24-20:07:04 import
Igor Sysoev <igor@sysoev.ru>
parents:
326
diff
changeset
|
29 |
306
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
302
diff
changeset
|
30 |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
31 sig_atomic_t ngx_terminate; |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
32 sig_atomic_t ngx_quit; |
326
8733703a37f3
nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
324
diff
changeset
|
33 ngx_uint_t ngx_exiting; |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
282
diff
changeset
|
34 |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
282
diff
changeset
|
35 #if 0 |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
282
diff
changeset
|
36 |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
37 sig_atomic_t ngx_noaccept; |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
38 sig_atomic_t ngx_reconfigure; |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
39 sig_atomic_t ngx_reopen; |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
40 sig_atomic_t ngx_change_binary; |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
41 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
42 #endif |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
43 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
44 |
461 | 45 static HMENU ngx_menu; |
46 | |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
282
diff
changeset
|
47 |
452 | 48 void ngx_master_process_cycle(ngx_cycle_t *cycle) |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
49 { |
324
0ab66f4b6c4d
nginx-0.0.3-2004-04-22-00:13:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
50 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, "master mode is not supported"); |
0ab66f4b6c4d
nginx-0.0.3-2004-04-22-00:13:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
51 |
318
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
52 exit(2); |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
53 } |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
54 |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
55 |
452 | 56 void ngx_single_process_cycle(ngx_cycle_t *cycle) |
318
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
57 { |
461 | 58 int rc; |
59 ngx_int_t i; | |
60 ngx_err_t err; | |
61 ngx_tid_t tid; | |
62 MSG message; | |
63 HWND window; | |
64 HMENU menu; | |
65 HICON icon,tray; | |
66 WNDCLASS wc; | |
67 HINSTANCE instance; | |
68 ngx_core_conf_t *ccf; | |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
69 |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
70 ngx_init_temp_number(); |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
71 |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
72 for (i = 0; ngx_modules[i]; i++) { |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
73 if (ngx_modules[i]->init_process) { |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
74 if (ngx_modules[i]->init_process(cycle) == NGX_ERROR) { |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
75 /* fatal */ |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
76 exit(2); |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
77 } |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
78 } |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
79 } |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
80 |
461 | 81 |
82 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); | |
83 | |
84 if (ngx_init_threads(ngx_threads_n, | |
85 ccf->thread_stack_size, cycle) == NGX_ERROR) | |
86 { | |
87 /* fatal */ | |
88 exit(2); | |
89 } | |
90 | |
91 err = ngx_thread_key_create(&ngx_core_tls_key); | |
92 if (err != 0) { | |
93 ngx_log_error(NGX_LOG_ALERT, cycle->log, err, | |
94 ngx_thread_key_create_n " failed"); | |
95 /* fatal */ | |
96 exit(2); | |
97 } | |
98 | |
99 | |
100 instance = GetModuleHandle(NULL); | |
101 | |
102 icon = LoadIcon(instance, "nginx"); | |
103 if (icon == NULL) { | |
104 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
105 "LoadIcon(\"nginx\") failed"); | |
106 /* fatal */ | |
107 exit(2); | |
108 } | |
109 | |
110 tray = LoadIcon(instance, "tray"); | |
111 if (icon == NULL) { | |
112 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
113 "LoadIcon(\"tray\") failed"); | |
114 /* fatal */ | |
115 exit(2); | |
116 } | |
117 | |
118 menu = LoadMenu(instance, "nginx"); | |
119 if (menu == NULL) { | |
120 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
121 "LoadMenu() failed"); | |
122 /* fatal */ | |
123 exit(2); | |
124 } | |
125 | |
126 ngx_menu = GetSubMenu(menu, 0); | |
127 if (ngx_menu == NULL) { | |
128 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
129 "GetSubMenu() failed"); | |
130 /* fatal */ | |
131 exit(2); | |
132 } | |
133 | |
134 | |
135 wc.style = CS_HREDRAW|CS_VREDRAW; | |
136 wc.lpfnWndProc = ngx_window_procedure; | |
137 wc.cbClsExtra = 0; | |
138 wc.cbWndExtra = 0; | |
139 wc.hInstance = instance; | |
140 wc.hIcon = icon; | |
141 wc.hCursor = NULL; | |
142 wc.hbrBackground = NULL; | |
143 wc.lpszMenuName = NULL; | |
144 wc.lpszClassName = "nginx"; | |
145 | |
146 if (RegisterClass(&wc) == 0) { | |
147 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
148 "RegisterClass() failed"); | |
149 /* fatal */ | |
150 exit(2); | |
151 } | |
152 | |
153 | |
154 window = CreateWindow("nginx", "nginx", WS_OVERLAPPEDWINDOW, | |
155 CW_USEDEFAULT, CW_USEDEFAULT, | |
156 CW_USEDEFAULT, CW_USEDEFAULT, | |
157 NULL, NULL, instance, NULL); | |
158 | |
159 if (window == NULL) { | |
160 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
161 "CreateWindow() failed"); | |
162 /* fatal */ | |
163 exit(2); | |
164 } | |
165 | |
166 | |
167 if (ngx_system_tray_icon(window, NIM_ADD, tray, (u_char *) " nginx") | |
168 == NGX_ERROR) | |
169 { | |
170 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | |
171 "Shell_NotifyIcon(NIM_ADD) failed"); | |
172 /* fatal */ | |
173 exit(2); | |
174 } | |
175 | |
176 | |
177 if (ngx_create_thread(&tid, ngx_worker_thread_cycle, NULL, cycle->log) != 0) | |
178 { | |
179 /* fatal */ | |
180 exit(2); | |
181 } | |
182 | |
183 | |
184 for ( ;; ) { | |
185 rc = GetMessage(&message, NULL, 0, 0); | |
186 | |
187 if (rc == -1) { | |
188 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | |
189 "GetMessage() failed"); | |
190 continue; | |
191 } | |
192 | |
193 if (rc == 0) { | |
194 exit(0); | |
195 } | |
196 | |
197 TranslateMessage(&message); | |
198 DispatchMessage(&message); | |
199 } | |
200 } | |
201 | |
202 | |
203 static void *ngx_worker_thread_cycle(void *data) | |
204 { | |
205 ngx_cycle_t *cycle; | |
206 | |
207 cycle = (ngx_cycle_t *) ngx_cycle; | |
208 | |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
209 for ( ;; ) { |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
210 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle"); |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
211 |
302
1526e7686b20
nginx-0.0.3-2004-04-01-10:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
212 ngx_process_events(cycle); |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
213 } |
461 | 214 |
215 return NULL; | |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
216 } |
461 | 217 |
218 | |
219 static long __stdcall ngx_window_procedure(HWND window, u_int message, | |
220 u_int wparam, long lparam) | |
221 { | |
222 POINT mouse; | |
223 | |
224 switch (message) { | |
225 | |
226 case NGX_WM_TRAY: | |
227 if (lparam == WM_RBUTTONDOWN) { | |
228 if (GetCursorPos(&mouse) == 0) { | |
229 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_errno, | |
230 "GetCursorPos() failed"); | |
231 return 0; | |
232 } | |
233 | |
234 if (SetForegroundWindow(window) == 0) { | |
235 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_errno, | |
236 "SetForegroundWindow() failed"); | |
237 return 0; | |
238 } | |
239 | |
240 if (TrackPopupMenu(ngx_menu, TPM_RIGHTBUTTON, | |
241 mouse.x, mouse.y, 0, window, NULL) == 0) | |
242 { | |
243 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_errno, | |
244 "TrackPopupMenu() failed"); | |
245 return 0; | |
246 } | |
247 } | |
248 | |
249 return 0; | |
250 | |
251 case WM_COMMAND: | |
252 if (wparam == NGX_WM_ABOUT) { | |
253 ngx_message_box("nginx", MB_OK, 0, | |
254 NGINX_VER CRLF "(C) 2002-2004 Igor Sysoev"); | |
255 return 0; | |
256 } | |
257 | |
258 if (wparam == NGX_WM_EXIT) { | |
259 if (ngx_system_tray_icon(window, NIM_DELETE, NULL, NULL) | |
260 == NGX_ERROR) | |
261 { | |
262 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_errno, | |
263 "Shell_NotifyIcon(NIM_DELETE) failed"); | |
264 } | |
265 } | |
266 | |
267 PostQuitMessage(0); | |
268 | |
269 return 0; | |
270 | |
271 default: | |
272 return DefWindowProc(window, message, wparam, lparam); | |
273 } | |
274 } |