diff options
Diffstat (limited to 'src/daemon/daemontest_post_loop.c')
-rw-r--r-- | src/daemon/daemontest_post_loop.c | 385 |
1 files changed, 194 insertions, 191 deletions
diff --git a/src/daemon/daemontest_post_loop.c b/src/daemon/daemontest_post_loop.c index 588a02d3..f1555c16 100644 --- a/src/daemon/daemontest_post_loop.c +++ b/src/daemon/daemontest_post_loop.c | |||
@@ -78,19 +78,17 @@ ahc_echo (void *cls, | |||
78 | printf ("METHOD: %s\n", method); | 78 | printf ("METHOD: %s\n", method); |
79 | return MHD_NO; /* unexpected method */ | 79 | return MHD_NO; /* unexpected method */ |
80 | } | 80 | } |
81 | if ( (*mptr != NULL) && | 81 | if ((*mptr != NULL) && (0 == *upload_data_size)) |
82 | (0 == *upload_data_size) ) { | 82 | { |
83 | if (*mptr != &marker) | 83 | if (*mptr != &marker) |
84 | abort(); | 84 | abort (); |
85 | response = MHD_create_response_from_data (2, | 85 | response = MHD_create_response_from_data (2, "OK", MHD_NO, MHD_NO); |
86 | "OK", | 86 | ret = MHD_queue_response (connection, MHD_HTTP_OK, response); |
87 | MHD_NO, MHD_NO); | 87 | MHD_destroy_response (response); |
88 | ret = MHD_queue_response (connection, MHD_HTTP_OK, response); | 88 | *mptr = NULL; |
89 | MHD_destroy_response (response); | 89 | return ret; |
90 | *mptr = NULL; | 90 | } |
91 | return ret; | 91 | if (strlen (POST_DATA) != *upload_data_size) |
92 | } | ||
93 | if (strlen(POST_DATA) != *upload_data_size) | ||
94 | return MHD_YES; | 92 | return MHD_YES; |
95 | *upload_data_size = 0; | 93 | *upload_data_size = 0; |
96 | *mptr = ▮ | 94 | *mptr = ▮ |
@@ -115,48 +113,49 @@ testInternalPost () | |||
115 | 1080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); | 113 | 1080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); |
116 | if (d == NULL) | 114 | if (d == NULL) |
117 | return 1; | 115 | return 1; |
118 | for (i=0;i<LOOPCOUNT;i++) { | 116 | for (i = 0; i < LOOPCOUNT; i++) |
119 | if (0 == i % 100) | 117 | { |
120 | fprintf(stderr, "."); | 118 | if (0 == i % 100) |
121 | c = curl_easy_init (); | 119 | fprintf (stderr, "."); |
122 | cbc.pos = 0; | 120 | c = curl_easy_init (); |
123 | buf[0] = '\0'; | 121 | cbc.pos = 0; |
124 | sprintf(url, "http://localhost:1080/hw%d", i); | 122 | buf[0] = '\0'; |
125 | curl_easy_setopt (c, CURLOPT_URL, url); | 123 | sprintf (url, "http://localhost:1080/hw%d", i); |
126 | curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); | 124 | curl_easy_setopt (c, CURLOPT_URL, url); |
127 | curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); | 125 | curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); |
128 | curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); | 126 | curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); |
129 | curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA)); | 127 | curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); |
130 | curl_easy_setopt (c, CURLOPT_POST, 1L); | 128 | curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA)); |
131 | curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); | 129 | curl_easy_setopt (c, CURLOPT_POST, 1L); |
132 | curl_easy_setopt (c, CURLOPT_TIMEOUT, 2L); | 130 | curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); |
133 | if (oneone) | 131 | curl_easy_setopt (c, CURLOPT_TIMEOUT, 2L); |
134 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); | 132 | if (oneone) |
135 | else | 133 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
136 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); | 134 | else |
137 | curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 2L); | 135 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); |
138 | // NOTE: use of CONNECTTIMEOUT without also | 136 | curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 2L); |
139 | // setting NOSIGNAL results in really weird | 137 | // NOTE: use of CONNECTTIMEOUT without also |
140 | // crashes on my system! | 138 | // setting NOSIGNAL results in really weird |
141 | curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); | 139 | // crashes on my system! |
142 | if (CURLE_OK != (errornum = curl_easy_perform (c))) | 140 | curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); |
143 | { | 141 | if (CURLE_OK != (errornum = curl_easy_perform (c))) |
144 | fprintf (stderr, | 142 | { |
145 | "curl_easy_perform failed: `%s'\n", | 143 | fprintf (stderr, |
146 | curl_easy_strerror (errornum)); | 144 | "curl_easy_perform failed: `%s'\n", |
147 | curl_easy_cleanup (c); | 145 | curl_easy_strerror (errornum)); |
148 | MHD_stop_daemon (d); | 146 | curl_easy_cleanup (c); |
149 | return 2; | 147 | MHD_stop_daemon (d); |
150 | } | 148 | return 2; |
151 | curl_easy_cleanup (c); | 149 | } |
152 | if ( (buf[0] != 'O') || | 150 | curl_easy_cleanup (c); |
153 | (buf[1] != 'K') ) { | 151 | if ((buf[0] != 'O') || (buf[1] != 'K')) |
154 | MHD_stop_daemon (d); | 152 | { |
155 | return 4; | 153 | MHD_stop_daemon (d); |
154 | return 4; | ||
155 | } | ||
156 | } | 156 | } |
157 | } | ||
158 | MHD_stop_daemon (d); | 157 | MHD_stop_daemon (d); |
159 | fprintf(stderr, "\n"); | 158 | fprintf (stderr, "\n"); |
160 | return 0; | 159 | return 0; |
161 | } | 160 | } |
162 | 161 | ||
@@ -177,48 +176,49 @@ testMultithreadedPost () | |||
177 | 1081, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); | 176 | 1081, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); |
178 | if (d == NULL) | 177 | if (d == NULL) |
179 | return 16; | 178 | return 16; |
180 | for (i=0;i<LOOPCOUNT;i++) { | 179 | for (i = 0; i < LOOPCOUNT; i++) |
181 | if (0 == i % 100) | 180 | { |
182 | fprintf(stderr, "."); | 181 | if (0 == i % 100) |
183 | c = curl_easy_init (); | 182 | fprintf (stderr, "."); |
184 | cbc.pos = 0; | 183 | c = curl_easy_init (); |
185 | buf[0] = '\0'; | 184 | cbc.pos = 0; |
186 | sprintf(url, "http://localhost:1081/hw%d", i); | 185 | buf[0] = '\0'; |
187 | curl_easy_setopt (c, CURLOPT_URL, url); | 186 | sprintf (url, "http://localhost:1081/hw%d", i); |
188 | curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); | 187 | curl_easy_setopt (c, CURLOPT_URL, url); |
189 | curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); | 188 | curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); |
190 | curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); | 189 | curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); |
191 | curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA)); | 190 | curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); |
192 | curl_easy_setopt (c, CURLOPT_POST, 1L); | 191 | curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA)); |
193 | curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); | 192 | curl_easy_setopt (c, CURLOPT_POST, 1L); |
194 | curl_easy_setopt (c, CURLOPT_TIMEOUT, 2L); | 193 | curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); |
195 | if (oneone) | 194 | curl_easy_setopt (c, CURLOPT_TIMEOUT, 2L); |
196 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); | 195 | if (oneone) |
197 | else | 196 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
198 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); | 197 | else |
199 | curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 2L); | 198 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); |
200 | // NOTE: use of CONNECTTIMEOUT without also | 199 | curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 2L); |
201 | // setting NOSIGNAL results in really weird | 200 | // NOTE: use of CONNECTTIMEOUT without also |
202 | // crashes on my system! | 201 | // setting NOSIGNAL results in really weird |
203 | curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); | 202 | // crashes on my system! |
204 | if (CURLE_OK != (errornum = curl_easy_perform (c))) | 203 | curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); |
205 | { | 204 | if (CURLE_OK != (errornum = curl_easy_perform (c))) |
206 | fprintf (stderr, | 205 | { |
207 | "curl_easy_perform failed: `%s'\n", | 206 | fprintf (stderr, |
208 | curl_easy_strerror (errornum)); | 207 | "curl_easy_perform failed: `%s'\n", |
209 | curl_easy_cleanup (c); | 208 | curl_easy_strerror (errornum)); |
210 | MHD_stop_daemon (d); | 209 | curl_easy_cleanup (c); |
211 | return 32; | 210 | MHD_stop_daemon (d); |
212 | } | 211 | return 32; |
213 | curl_easy_cleanup (c); | 212 | } |
214 | if ( (buf[0] != 'O') || | 213 | curl_easy_cleanup (c); |
215 | (buf[1] != 'K') ) { | 214 | if ((buf[0] != 'O') || (buf[1] != 'K')) |
216 | MHD_stop_daemon (d); | 215 | { |
217 | return 64; | 216 | MHD_stop_daemon (d); |
217 | return 64; | ||
218 | } | ||
218 | } | 219 | } |
219 | } | ||
220 | MHD_stop_daemon (d); | 220 | MHD_stop_daemon (d); |
221 | fprintf(stderr, "\n"); | 221 | fprintf (stderr, "\n"); |
222 | return 0; | 222 | return 0; |
223 | } | 223 | } |
224 | 224 | ||
@@ -259,106 +259,109 @@ testExternalPost () | |||
259 | MHD_stop_daemon (d); | 259 | MHD_stop_daemon (d); |
260 | return 512; | 260 | return 512; |
261 | } | 261 | } |
262 | for (i=0;i<LOOPCOUNT;i++) { | 262 | for (i = 0; i < LOOPCOUNT; i++) |
263 | if (0 == i % 100) | 263 | { |
264 | fprintf(stderr, "."); | 264 | if (0 == i % 100) |
265 | c = curl_easy_init (); | 265 | fprintf (stderr, "."); |
266 | cbc.pos = 0; | 266 | c = curl_easy_init (); |
267 | buf[0] = '\0'; | 267 | cbc.pos = 0; |
268 | sprintf(url, "http://localhost:1082/hw%d", i); | 268 | buf[0] = '\0'; |
269 | curl_easy_setopt (c, CURLOPT_URL, url); | 269 | sprintf (url, "http://localhost:1082/hw%d", i); |
270 | curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); | 270 | curl_easy_setopt (c, CURLOPT_URL, url); |
271 | curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); | 271 | curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); |
272 | curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); | 272 | curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); |
273 | curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA)); | 273 | curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); |
274 | curl_easy_setopt (c, CURLOPT_POST, 1L); | 274 | curl_easy_setopt (c, CURLOPT_POSTFIELDSIZE, strlen (POST_DATA)); |
275 | curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); | 275 | curl_easy_setopt (c, CURLOPT_POST, 1L); |
276 | curl_easy_setopt (c, CURLOPT_TIMEOUT, 5L); | 276 | curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); |
277 | if (oneone) | 277 | curl_easy_setopt (c, CURLOPT_TIMEOUT, 5L); |
278 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); | 278 | if (oneone) |
279 | else | 279 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
280 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); | 280 | else |
281 | curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 5L); | 281 | curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); |
282 | // NOTE: use of CONNECTTIMEOUT without also | 282 | curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 5L); |
283 | // setting NOSIGNAL results in really weird | 283 | // NOTE: use of CONNECTTIMEOUT without also |
284 | // crashes on my system! | 284 | // setting NOSIGNAL results in really weird |
285 | curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); | 285 | // crashes on my system! |
286 | mret = curl_multi_add_handle (multi, c); | 286 | curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); |
287 | if (mret != CURLM_OK) | 287 | mret = curl_multi_add_handle (multi, c); |
288 | { | 288 | if (mret != CURLM_OK) |
289 | curl_multi_cleanup (multi); | 289 | { |
290 | curl_easy_cleanup (c); | 290 | curl_multi_cleanup (multi); |
291 | MHD_stop_daemon (d); | 291 | curl_easy_cleanup (c); |
292 | return 1024; | 292 | MHD_stop_daemon (d); |
293 | } | 293 | return 1024; |
294 | start = time (NULL); | 294 | } |
295 | while ((time (NULL) - start < 5) && (multi != NULL)) | 295 | start = time (NULL); |
296 | { | 296 | while ((time (NULL) - start < 5) && (multi != NULL)) |
297 | max = 0; | 297 | { |
298 | FD_ZERO (&rs); | 298 | max = 0; |
299 | FD_ZERO (&ws); | 299 | FD_ZERO (&rs); |
300 | FD_ZERO (&es); | 300 | FD_ZERO (&ws); |
301 | while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform (multi, &running)); | 301 | FD_ZERO (&es); |
302 | mret = curl_multi_fdset (multi, &rs, &ws, &es, &max); | 302 | while (CURLM_CALL_MULTI_PERFORM == |
303 | if (mret != CURLM_OK) | 303 | curl_multi_perform (multi, &running)); |
304 | { | 304 | mret = curl_multi_fdset (multi, &rs, &ws, &es, &max); |
305 | curl_multi_remove_handle (multi, c); | 305 | if (mret != CURLM_OK) |
306 | curl_multi_cleanup (multi); | 306 | { |
307 | curl_easy_cleanup (c); | 307 | curl_multi_remove_handle (multi, c); |
308 | MHD_stop_daemon (d); | 308 | curl_multi_cleanup (multi); |
309 | return 2048; | 309 | curl_easy_cleanup (c); |
310 | } | 310 | MHD_stop_daemon (d); |
311 | if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max)) | 311 | return 2048; |
312 | { | 312 | } |
313 | curl_multi_remove_handle (multi, c); | 313 | if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max)) |
314 | curl_multi_cleanup (multi); | 314 | { |
315 | curl_easy_cleanup (c); | 315 | curl_multi_remove_handle (multi, c); |
316 | MHD_stop_daemon (d); | 316 | curl_multi_cleanup (multi); |
317 | return 4096; | 317 | curl_easy_cleanup (c); |
318 | } | 318 | MHD_stop_daemon (d); |
319 | if (MHD_NO == MHD_get_timeout(d, &timeout)) | 319 | return 4096; |
320 | timeout = 1000000; /* 1000s == INFTY */ | 320 | } |
321 | if ( (CURLM_OK == curl_multi_timeout(multi, &ctimeout)) && | 321 | if (MHD_NO == MHD_get_timeout (d, &timeout)) |
322 | (ctimeout < timeout) && | 322 | timeout = 1000000; /* 1000s == INFTY */ |
323 | (ctimeout >= 0) ) | 323 | if ((CURLM_OK == curl_multi_timeout (multi, &ctimeout)) && |
324 | timeout = ctimeout; | 324 | (ctimeout < timeout) && (ctimeout >= 0)) |
325 | tv.tv_sec = timeout / 1000; | 325 | timeout = ctimeout; |
326 | tv.tv_usec = (timeout % 1000) * 1000; | 326 | tv.tv_sec = timeout / 1000; |
327 | select (max + 1, &rs, &ws, &es, &tv); | 327 | tv.tv_usec = (timeout % 1000) * 1000; |
328 | while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform (multi, &running)); | 328 | select (max + 1, &rs, &ws, &es, &tv); |
329 | if (running == 0) | 329 | while (CURLM_CALL_MULTI_PERFORM == |
330 | { | 330 | curl_multi_perform (multi, &running)); |
331 | msg = curl_multi_info_read (multi, &running); | 331 | if (running == 0) |
332 | if (msg == NULL) | 332 | { |
333 | break; | 333 | msg = curl_multi_info_read (multi, &running); |
334 | if (msg->msg == CURLMSG_DONE) | 334 | if (msg == NULL) |
335 | { | 335 | break; |
336 | if (msg->data.result != CURLE_OK) | 336 | if (msg->msg == CURLMSG_DONE) |
337 | printf ("%s failed at %s:%d: `%s'\n", | 337 | { |
338 | "curl_multi_perform", | 338 | if (msg->data.result != CURLE_OK) |
339 | __FILE__, | 339 | printf ("%s failed at %s:%d: `%s'\n", |
340 | __LINE__, curl_easy_strerror (msg->data.result)); | 340 | "curl_multi_perform", |
341 | curl_multi_remove_handle (multi, c); | 341 | __FILE__, |
342 | curl_easy_cleanup (c); | 342 | __LINE__, curl_easy_strerror (msg->data.result)); |
343 | c = NULL; | 343 | curl_multi_remove_handle (multi, c); |
344 | } | 344 | curl_easy_cleanup (c); |
345 | } | 345 | c = NULL; |
346 | MHD_run (d); | 346 | } |
347 | } | 347 | } |
348 | if (c != NULL) { | 348 | MHD_run (d); |
349 | curl_multi_remove_handle (multi, c); | 349 | } |
350 | curl_easy_cleanup (c); | 350 | if (c != NULL) |
351 | { | ||
352 | curl_multi_remove_handle (multi, c); | ||
353 | curl_easy_cleanup (c); | ||
354 | } | ||
355 | if ((buf[0] != 'O') || (buf[1] != 'K')) | ||
356 | { | ||
357 | curl_multi_cleanup (multi); | ||
358 | MHD_stop_daemon (d); | ||
359 | return 8192; | ||
360 | } | ||
351 | } | 361 | } |
352 | if ( (buf[0] != 'O') || | 362 | curl_multi_cleanup (multi); |
353 | (buf[1] != 'K') ) { | ||
354 | curl_multi_cleanup (multi); | ||
355 | MHD_stop_daemon (d); | ||
356 | return 8192; | ||
357 | } | ||
358 | } | ||
359 | curl_multi_cleanup (multi); | ||
360 | MHD_stop_daemon (d); | 363 | MHD_stop_daemon (d); |
361 | fprintf(stderr, "\n"); | 364 | fprintf (stderr, "\n"); |
362 | return 0; | 365 | return 0; |
363 | } | 366 | } |
364 | 367 | ||