aboutsummaryrefslogtreecommitdiff
path: root/src/daemon/daemontest_post_loop.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon/daemontest_post_loop.c')
-rw-r--r--src/daemon/daemontest_post_loop.c385
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, &copyBuffer); 124 curl_easy_setopt (c, CURLOPT_URL, url);
127 curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); 125 curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
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, &copyBuffer); 187 curl_easy_setopt (c, CURLOPT_URL, url);
189 curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); 188 curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
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, &copyBuffer); 270 curl_easy_setopt (c, CURLOPT_URL, url);
271 curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); 271 curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
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