diff options
author | Christian Grothoff <christian@grothoff.org> | 2008-04-13 02:54:58 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2008-04-13 02:54:58 +0000 |
commit | 72c08272fdbb426830363b0903224241157deb18 (patch) | |
tree | 7be7c5198f18edfe4b441744ff2e6ea83b896123 | |
parent | 359fcdda235f8ce9c625e1789e6b22bb30d592fd (diff) |
formatting
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | src/daemon/connection.c | 187 | ||||
-rw-r--r-- | src/testcurl/daemontest_get_chunked.c | 2 | ||||
-rw-r--r-- | src/testcurl/daemontest_long_header.c | 4 | ||||
-rw-r--r-- | src/testzzuf/daemontest_get.c | 253 | ||||
-rw-r--r-- | src/testzzuf/daemontest_get_chunked.c | 235 | ||||
-rw-r--r-- | src/testzzuf/daemontest_large_put.c | 70 | ||||
-rw-r--r-- | src/testzzuf/socat.c | 71 |
8 files changed, 415 insertions, 409 deletions
@@ -9,6 +9,8 @@ Sat Apr 12 15:14:05 MDT 2008 errors (such as request too large and malformed requests). Without that flag, the webpages returned will still be empty. + Added zzuf-based fuzzing-testcases (these require the + zzuf and socat binaries to be installed). Fri Apr 11 20:20:34 MDT 2008 I hereby dub libmicrohttpd a GNU package. -Richard Stallman diff --git a/src/daemon/connection.c b/src/daemon/connection.c index 6246ee21..eb97c6b9 100644 --- a/src/daemon/connection.c +++ b/src/daemon/connection.c @@ -563,8 +563,7 @@ build_header_response (struct MHD_Connection *connection) */ static void transmit_error_response (struct MHD_Connection *connection, - unsigned int status_code, - const char * message) + unsigned int status_code, const char *message) { struct MHD_Response *response; @@ -574,11 +573,10 @@ transmit_error_response (struct MHD_Connection *connection, #if HAVE_MESSAGES MHD_DLOG (connection->daemon, "Error %u (`%s') processing request, closing connection.\n", - status_code, - message); + status_code, message); #endif response = MHD_create_response_from_data (strlen (message), - (void*)message, MHD_NO, MHD_NO); + (void *) message, MHD_NO, MHD_NO); MHD_queue_response (connection, status_code, response); EXTRA_CHECK (connection->response != NULL); MHD_destroy_response (response); @@ -657,10 +655,10 @@ MHD_connection_get_fdset (struct MHD_Connection *connection, && (MHD_NO == try_grow_read_buffer (connection))) { transmit_error_response (connection, - (connection->url != NULL) - ? MHD_HTTP_REQUEST_ENTITY_TOO_LARGE - : MHD_HTTP_REQUEST_URI_TOO_LONG, - REQUEST_TOO_BIG); + (connection->url != NULL) + ? MHD_HTTP_REQUEST_ENTITY_TOO_LARGE + : MHD_HTTP_REQUEST_URI_TOO_LONG, + REQUEST_TOO_BIG); continue; } if (MHD_NO == connection->read_closed) @@ -774,10 +772,10 @@ get_next_header_line (struct MHD_Connection *connection) if (rbuf == NULL) { transmit_error_response (connection, - (connection->url != NULL) - ? MHD_HTTP_REQUEST_ENTITY_TOO_LARGE - : MHD_HTTP_REQUEST_URI_TOO_LONG, - REQUEST_TOO_BIG); + (connection->url != NULL) + ? MHD_HTTP_REQUEST_ENTITY_TOO_LARGE + : MHD_HTTP_REQUEST_URI_TOO_LONG, + REQUEST_TOO_BIG); } else { @@ -816,7 +814,7 @@ connection_add_header (struct MHD_Connection *connection, "Not enough memory to allocate header record!\n"); #endif transmit_error_response (connection, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, - REQUEST_TOO_BIG); + REQUEST_TOO_BIG); return MHD_NO; } hdr->next = connection->headers_received; @@ -884,7 +882,7 @@ parse_cookie_header (struct MHD_Connection *connection) MHD_DLOG (connection->daemon, "Not enough memory to parse cookies!\n"); #endif transmit_error_response (connection, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, - REQUEST_TOO_BIG); + REQUEST_TOO_BIG); return MHD_NO; } memcpy (cpy, hdr, strlen (hdr) + 1); @@ -1240,8 +1238,8 @@ process_broken_line (struct MHD_Connection *connection, if (last == NULL) { transmit_error_response (connection, - MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, - REQUEST_TOO_BIG); + MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, + REQUEST_TOO_BIG); return MHD_NO; } tmp = line; @@ -1251,24 +1249,23 @@ process_broken_line (struct MHD_Connection *connection, connection->last = last; return MHD_YES; /* possibly more than 2 lines... */ } - EXTRA_CHECK ( (last != NULL) && (connection->colon != NULL) ); - if ( (MHD_NO == connection_add_header (connection, - last, connection->colon, kind)) ) + EXTRA_CHECK ((last != NULL) && (connection->colon != NULL)); + if ((MHD_NO == connection_add_header (connection, + last, connection->colon, kind))) { transmit_error_response (connection, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE, - REQUEST_TOO_BIG); + REQUEST_TOO_BIG); return MHD_NO; } /* we still have the current line to deal with... */ if (strlen (line) != 0) { if (MHD_NO == process_header_line (connection, line)) - { - transmit_error_response(connection, - MHD_HTTP_BAD_REQUEST, - REQUEST_MALFORMED); - return MHD_NO; - } + { + transmit_error_response (connection, + MHD_HTTP_BAD_REQUEST, REQUEST_MALFORMED); + return MHD_NO; + } } return MHD_YES; } @@ -1638,16 +1635,16 @@ MHD_connection_handle_idle (struct MHD_Connection *connection) case MHD_CONNECTION_INIT: line = get_next_header_line (connection); if (line == NULL) - { - if (connection->state != MHD_CONNECTION_INIT) - continue; - if (connection->read_closed) - { - connection->state = MHD_CONNECTION_CLOSED; - continue; - } - break; - } + { + if (connection->state != MHD_CONNECTION_INIT) + continue; + if (connection->read_closed) + { + connection->state = MHD_CONNECTION_CLOSED; + continue; + } + break; + } if (MHD_NO == parse_initial_message_line (connection, line)) connection->state = MHD_CONNECTION_CLOSED; else @@ -1656,46 +1653,46 @@ MHD_connection_handle_idle (struct MHD_Connection *connection) case MHD_CONNECTION_URL_RECEIVED: line = get_next_header_line (connection); if (line == NULL) - { - if (connection->state != MHD_CONNECTION_URL_RECEIVED) - continue; - if (connection->read_closed) - { - connection->state = MHD_CONNECTION_CLOSED; - continue; - } - break; - } + { + if (connection->state != MHD_CONNECTION_URL_RECEIVED) + continue; + if (connection->read_closed) + { + connection->state = MHD_CONNECTION_CLOSED; + continue; + } + break; + } if (strlen (line) == 0) { connection->state = MHD_CONNECTION_HEADERS_RECEIVED; continue; } if (MHD_NO == process_header_line (connection, line)) - { - transmit_error_response(connection, - MHD_HTTP_BAD_REQUEST, - REQUEST_MALFORMED); - break; - } + { + transmit_error_response (connection, + MHD_HTTP_BAD_REQUEST, + REQUEST_MALFORMED); + break; + } connection->state = MHD_CONNECTION_HEADER_PART_RECEIVED; continue; case MHD_CONNECTION_HEADER_PART_RECEIVED: line = get_next_header_line (connection); if (line == NULL) - { - if (connection->state != MHD_CONNECTION_HEADER_PART_RECEIVED) - continue; - if (connection->read_closed) - { - connection->state = MHD_CONNECTION_CLOSED; - continue; - } - break; - } - if (MHD_NO == - process_broken_line (connection, line, MHD_HEADER_KIND)) - continue; + { + if (connection->state != MHD_CONNECTION_HEADER_PART_RECEIVED) + continue; + if (connection->read_closed) + { + connection->state = MHD_CONNECTION_CLOSED; + continue; + } + break; + } + if (MHD_NO == + process_broken_line (connection, line, MHD_HEADER_KIND)) + continue; if (strlen (line) == 0) { connection->state = MHD_CONNECTION_HEADERS_RECEIVED; @@ -1751,46 +1748,46 @@ MHD_connection_handle_idle (struct MHD_Connection *connection) case MHD_CONNECTION_BODY_RECEIVED: line = get_next_header_line (connection); if (line == NULL) - { - if (connection->state != MHD_CONNECTION_BODY_RECEIVED) - continue; - if (connection->read_closed) - { - connection->state = MHD_CONNECTION_CLOSED; - continue; - } - break; - } + { + if (connection->state != MHD_CONNECTION_BODY_RECEIVED) + continue; + if (connection->read_closed) + { + connection->state = MHD_CONNECTION_CLOSED; + continue; + } + break; + } if (strlen (line) == 0) { connection->state = MHD_CONNECTION_FOOTERS_RECEIVED; continue; } if (MHD_NO == process_header_line (connection, line)) - { - transmit_error_response(connection, - MHD_HTTP_BAD_REQUEST, - REQUEST_MALFORMED); - break; - } + { + transmit_error_response (connection, + MHD_HTTP_BAD_REQUEST, + REQUEST_MALFORMED); + break; + } connection->state = MHD_CONNECTION_FOOTER_PART_RECEIVED; continue; case MHD_CONNECTION_FOOTER_PART_RECEIVED: line = get_next_header_line (connection); if (line == NULL) - { - if (connection->state != MHD_CONNECTION_FOOTER_PART_RECEIVED) - continue; - if (connection->read_closed) - { - connection->state = MHD_CONNECTION_CLOSED; - continue; - } - break; - } - if (MHD_NO == - process_broken_line (connection, line, MHD_FOOTER_KIND)) - continue; + { + if (connection->state != MHD_CONNECTION_FOOTER_PART_RECEIVED) + continue; + if (connection->read_closed) + { + connection->state = MHD_CONNECTION_CLOSED; + continue; + } + break; + } + if (MHD_NO == + process_broken_line (connection, line, MHD_FOOTER_KIND)) + continue; if (strlen (line) == 0) { connection->state = MHD_CONNECTION_FOOTERS_RECEIVED; diff --git a/src/testcurl/daemontest_get_chunked.c b/src/testcurl/daemontest_get_chunked.c index ba8550b7..e88c86ad 100644 --- a/src/testcurl/daemontest_get_chunked.c +++ b/src/testcurl/daemontest_get_chunked.c @@ -353,7 +353,7 @@ main (int argc, char *const *argv) return 2; errorCount += testInternalGet (); errorCount += testMultithreadedGet (); - errorCount += testExternalGet (); + errorCount += testExternalGet (); if (errorCount != 0) fprintf (stderr, "Error (code: %u)\n", errorCount); curl_global_cleanup (); diff --git a/src/testcurl/daemontest_long_header.c b/src/testcurl/daemontest_long_header.c index bfdc02e8..385b9776 100644 --- a/src/testcurl/daemontest_long_header.c +++ b/src/testcurl/daemontest_long_header.c @@ -99,7 +99,7 @@ testLongUrlGet () cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; - d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */, + d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ , 1080, &apc_all, NULL, @@ -219,7 +219,7 @@ testLongHeaderGet () MHD_stop_daemon (d); free (url); if (code != MHD_HTTP_REQUEST_ENTITY_TOO_LARGE) - return 128; + return 128; return 0; } diff --git a/src/testzzuf/daemontest_get.c b/src/testzzuf/daemontest_get.c index d7b11f3e..ac43f75e 100644 --- a/src/testzzuf/daemontest_get.c +++ b/src/testzzuf/daemontest_get.c @@ -112,33 +112,34 @@ testInternalGet () cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; - d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */, + d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ , 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; - zzuf_socat_start(); - for (i=0;i<LOOP_COUNT;i++) { - fprintf(stderr, "."); - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); - if (oneone) - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - else - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - curl_easy_perform (c); - curl_easy_cleanup (c); - } - fprintf(stderr, "\n"); - zzuf_socat_stop(); + zzuf_socat_start (); + for (i = 0; i < LOOP_COUNT; i++) + { + fprintf (stderr, "."); + c = curl_easy_init (); + curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); + curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); + curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); + curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); + curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); + curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); + if (oneone) + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + else + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); + // NOTE: use of CONNECTTIMEOUT without also + // setting NOSIGNAL results in really weird + // crashes on my system! + curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); + curl_easy_perform (c); + curl_easy_cleanup (c); + } + fprintf (stderr, "\n"); + zzuf_socat_stop (); MHD_stop_daemon (d); return 0; } @@ -155,33 +156,34 @@ testMultithreadedGet () cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; - d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */, + d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ , 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 16; - zzuf_socat_start(); - for (i=0;i<LOOP_COUNT;i++) { - fprintf(stderr, "."); - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); - if (oneone) - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - else - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - curl_easy_perform (c); - curl_easy_cleanup (c); - } - fprintf(stderr, "\n"); - zzuf_socat_stop(); + zzuf_socat_start (); + for (i = 0; i < LOOP_COUNT; i++) + { + fprintf (stderr, "."); + c = curl_easy_init (); + curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); + curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); + curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); + curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); + curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); + if (oneone) + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + else + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); + curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); + // NOTE: use of CONNECTTIMEOUT without also + // setting NOSIGNAL results in really weird + // crashes on my system! + curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); + curl_easy_perform (c); + curl_easy_cleanup (c); + } + fprintf (stderr, "\n"); + zzuf_socat_stop (); MHD_stop_daemon (d); return 0; } @@ -209,7 +211,7 @@ testExternalGet () cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; - d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG*/, + d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ , 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; @@ -220,82 +222,83 @@ testExternalGet () MHD_stop_daemon (d); return 512; } - zzuf_socat_start(); - for (i=0;i<LOOP_COUNT;i++) { - fprintf(stderr, "."); - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - if (oneone) - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - else - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); - curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - mret = curl_multi_add_handle (multi, c); - if (mret != CURLM_OK) - { - curl_multi_cleanup (multi); - curl_easy_cleanup (c); - zzuf_socat_stop(); - MHD_stop_daemon (d); - return 1024; - } - start = time (NULL); - while ((time (NULL) - start < 5) && (c != NULL)) - { - max = 0; - FD_ZERO (&rs); - FD_ZERO (&ws); - FD_ZERO (&es); - curl_multi_perform (multi, &running); - mret = curl_multi_fdset (multi, &rs, &ws, &es, &max); - if (mret != CURLM_OK) - { - curl_multi_remove_handle (multi, c); - curl_multi_cleanup (multi); - curl_easy_cleanup (c); - zzuf_socat_stop(); - MHD_stop_daemon (d); - return 2048; - } - if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max)) - { - curl_multi_remove_handle (multi, c); - curl_multi_cleanup (multi); - curl_easy_cleanup (c); - zzuf_socat_stop(); - MHD_stop_daemon (d); - return 4096; - } - tv.tv_sec = 0; - tv.tv_usec = 1000; - select (max + 1, &rs, &ws, &es, &tv); - curl_multi_perform (multi, &running); - if (running == 0) - { - curl_multi_info_read (multi, &running); - curl_multi_remove_handle (multi, c); - curl_easy_cleanup (c); - c = NULL; - } - MHD_run (d); - } - if (c != NULL) - { - curl_multi_remove_handle (multi, c); - curl_easy_cleanup (c); - } - } - fprintf(stderr, "\n"); + zzuf_socat_start (); + for (i = 0; i < LOOP_COUNT; i++) + { + fprintf (stderr, "."); + c = curl_easy_init (); + curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); + curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); + curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); + curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); + if (oneone) + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + else + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); + curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); + curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); + // NOTE: use of CONNECTTIMEOUT without also + // setting NOSIGNAL results in really weird + // crashes on my system! + curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); + mret = curl_multi_add_handle (multi, c); + if (mret != CURLM_OK) + { + curl_multi_cleanup (multi); + curl_easy_cleanup (c); + zzuf_socat_stop (); + MHD_stop_daemon (d); + return 1024; + } + start = time (NULL); + while ((time (NULL) - start < 5) && (c != NULL)) + { + max = 0; + FD_ZERO (&rs); + FD_ZERO (&ws); + FD_ZERO (&es); + curl_multi_perform (multi, &running); + mret = curl_multi_fdset (multi, &rs, &ws, &es, &max); + if (mret != CURLM_OK) + { + curl_multi_remove_handle (multi, c); + curl_multi_cleanup (multi); + curl_easy_cleanup (c); + zzuf_socat_stop (); + MHD_stop_daemon (d); + return 2048; + } + if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max)) + { + curl_multi_remove_handle (multi, c); + curl_multi_cleanup (multi); + curl_easy_cleanup (c); + zzuf_socat_stop (); + MHD_stop_daemon (d); + return 4096; + } + tv.tv_sec = 0; + tv.tv_usec = 1000; + select (max + 1, &rs, &ws, &es, &tv); + curl_multi_perform (multi, &running); + if (running == 0) + { + curl_multi_info_read (multi, &running); + curl_multi_remove_handle (multi, c); + curl_easy_cleanup (c); + c = NULL; + } + MHD_run (d); + } + if (c != NULL) + { + curl_multi_remove_handle (multi, c); + curl_easy_cleanup (c); + } + } + fprintf (stderr, "\n"); curl_multi_cleanup (multi); - zzuf_socat_stop(); + zzuf_socat_stop (); MHD_stop_daemon (d); return 0; } @@ -312,7 +315,7 @@ main (int argc, char *const *argv) return 2; errorCount += testInternalGet (); errorCount += testMultithreadedGet (); - errorCount += testExternalGet (); + errorCount += testExternalGet (); if (errorCount != 0) fprintf (stderr, "Error (code: %u)\n", errorCount); curl_global_cleanup (); diff --git a/src/testzzuf/daemontest_get_chunked.c b/src/testzzuf/daemontest_get_chunked.c index 4110d874..ca94beb0 100644 --- a/src/testzzuf/daemontest_get_chunked.c +++ b/src/testzzuf/daemontest_get_chunked.c @@ -139,30 +139,31 @@ testInternalGet () cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; - d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */, + d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY /* | MHD_USE_DEBUG */ , 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; - zzuf_socat_start(); - for (i=0;i<LOOP_COUNT;i++) { - fprintf(stderr, "."); - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - curl_easy_perform (c); - curl_easy_cleanup (c); - } - fprintf(stderr, "\n"); - zzuf_socat_stop(); + zzuf_socat_start (); + for (i = 0; i < LOOP_COUNT; i++) + { + fprintf (stderr, "."); + c = curl_easy_init (); + curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); + curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); + curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); + curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); + curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); + curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + // NOTE: use of CONNECTTIMEOUT without also + // setting NOSIGNAL results in really weird + // crashes on my system! + curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); + curl_easy_perform (c); + curl_easy_cleanup (c); + } + fprintf (stderr, "\n"); + zzuf_socat_stop (); MHD_stop_daemon (d); return 0; } @@ -175,34 +176,35 @@ testMultithreadedGet () char buf[2048]; struct CBC cbc; int i; - + cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; - d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */, + d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION /* | MHD_USE_DEBUG */ , 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 16; - zzuf_socat_start(); - for (i=0;i<LOOP_COUNT;i++) { - fprintf(stderr, "."); - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - curl_easy_perform (c); - curl_easy_cleanup (c); - } - fprintf(stderr, "\n"); - zzuf_socat_stop(); + zzuf_socat_start (); + for (i = 0; i < LOOP_COUNT; i++) + { + fprintf (stderr, "."); + c = curl_easy_init (); + curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); + curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); + curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); + curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); + curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); + // NOTE: use of CONNECTTIMEOUT without also + // setting NOSIGNAL results in really weird + // crashes on my system! + curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); + curl_easy_perform (c); + curl_easy_cleanup (c); + } + fprintf (stderr, "\n"); + zzuf_socat_stop (); MHD_stop_daemon (d); return 0; } @@ -230,7 +232,7 @@ testExternalGet () cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; - d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */, + d = MHD_start_daemon (MHD_NO_FLAG /* | MHD_USE_DEBUG */ , 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; @@ -241,79 +243,80 @@ testExternalGet () MHD_stop_daemon (d); return 512; } - zzuf_socat_start(); - for (i=0;i<LOOP_COUNT;i++) { - fprintf(stderr, "."); - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - mret = curl_multi_add_handle (multi, c); - if (mret != CURLM_OK) - { - curl_multi_cleanup (multi); - curl_easy_cleanup (c); - zzuf_socat_stop(); - MHD_stop_daemon (d); - return 1024; - } - start = time (NULL); - while ((time (NULL) - start < 5) && (c != NULL)) - { - max = 0; - FD_ZERO (&rs); - FD_ZERO (&ws); - FD_ZERO (&es); - curl_multi_perform (multi, &running); - mret = curl_multi_fdset (multi, &rs, &ws, &es, &max); - if (mret != CURLM_OK) - { - curl_multi_remove_handle (multi, c); - curl_multi_cleanup (multi); - curl_easy_cleanup (c); - zzuf_socat_stop(); - MHD_stop_daemon (d); - return 2048; - } - if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max)) - { - curl_multi_remove_handle (multi, c); - curl_multi_cleanup (multi); - curl_easy_cleanup (c); - zzuf_socat_stop(); - MHD_stop_daemon (d); - return 4096; - } - tv.tv_sec = 0; - tv.tv_usec = 1000; - select (max + 1, &rs, &ws, &es, &tv); - curl_multi_perform (multi, &running); - if (running == 0) - { - curl_multi_info_read (multi, &running); - curl_multi_remove_handle (multi, c); - curl_easy_cleanup (c); - c = NULL; - } - MHD_run (d); - } - if (c != NULL) - { - curl_multi_remove_handle (multi, c); - curl_easy_cleanup (c); - } - } - fprintf(stderr, "\n"); + zzuf_socat_start (); + for (i = 0; i < LOOP_COUNT; i++) + { + fprintf (stderr, "."); + c = curl_easy_init (); + curl_easy_setopt (c, CURLOPT_URL, "http://localhost:11081/hello_world"); + curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); + curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); + curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); + curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); + // NOTE: use of CONNECTTIMEOUT without also + // setting NOSIGNAL results in really weird + // crashes on my system! + curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); + mret = curl_multi_add_handle (multi, c); + if (mret != CURLM_OK) + { + curl_multi_cleanup (multi); + curl_easy_cleanup (c); + zzuf_socat_stop (); + MHD_stop_daemon (d); + return 1024; + } + start = time (NULL); + while ((time (NULL) - start < 5) && (c != NULL)) + { + max = 0; + FD_ZERO (&rs); + FD_ZERO (&ws); + FD_ZERO (&es); + curl_multi_perform (multi, &running); + mret = curl_multi_fdset (multi, &rs, &ws, &es, &max); + if (mret != CURLM_OK) + { + curl_multi_remove_handle (multi, c); + curl_multi_cleanup (multi); + curl_easy_cleanup (c); + zzuf_socat_stop (); + MHD_stop_daemon (d); + return 2048; + } + if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &max)) + { + curl_multi_remove_handle (multi, c); + curl_multi_cleanup (multi); + curl_easy_cleanup (c); + zzuf_socat_stop (); + MHD_stop_daemon (d); + return 4096; + } + tv.tv_sec = 0; + tv.tv_usec = 1000; + select (max + 1, &rs, &ws, &es, &tv); + curl_multi_perform (multi, &running); + if (running == 0) + { + curl_multi_info_read (multi, &running); + curl_multi_remove_handle (multi, c); + curl_easy_cleanup (c); + c = NULL; + } + MHD_run (d); + } + if (c != NULL) + { + curl_multi_remove_handle (multi, c); + curl_easy_cleanup (c); + } + } + fprintf (stderr, "\n"); curl_multi_cleanup (multi); - zzuf_socat_stop(); + zzuf_socat_stop (); MHD_stop_daemon (d); return 0; } diff --git a/src/testzzuf/daemontest_large_put.c b/src/testzzuf/daemontest_large_put.c index b0c7bf37..72399c72 100644 --- a/src/testzzuf/daemontest_large_put.c +++ b/src/testzzuf/daemontest_large_put.c @@ -1,6 +1,6 @@ /* This file is part of libmicrohttpd - (C) 2007 Christian Grothoff + (C) 2007, 2008 Christian Grothoff libmicrohttpd is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -35,6 +35,18 @@ #include <unistd.h> #endif +#include "socat.c" + +/** + * A larger loop count will run more random tests -- + * which would be good, except that it may take too + * long for most user's patience. So this small + * value is the default. + */ +#define LOOP_COUNT 10 + +#define CURL_TIMEOUT 50L + static int oneone; /** @@ -133,8 +145,8 @@ testInternalPut () struct CBC cbc; unsigned int pos = 0; int done_flag = 0; - CURLcode errornum; char buf[2048]; + int i; cbc.buf = buf; cbc.size = 2048; @@ -144,40 +156,34 @@ testInternalPut () NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 1; - c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); - curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); - curl_easy_setopt (c, CURLOPT_READDATA, &pos); - curl_easy_setopt (c, CURLOPT_UPLOAD, 1L); - curl_easy_setopt (c, CURLOPT_INFILESIZE, (long) PUT_SIZE); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L); - if (oneone) - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - else - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); - curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L); - // NOTE: use of CONNECTTIMEOUT without also - // setting NOSIGNAL results in really weird - // crashes on my system! - curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); - if (CURLE_OK != (errornum = curl_easy_perform (c))) + for (i = 0; i < LOOP_COUNT; i++) { - fprintf (stderr, - "curl_easy_perform failed: `%s'\n", - curl_easy_strerror (errornum)); + fprintf (stderr, "."); + + c = curl_easy_init (); + curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); + curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); + curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); + curl_easy_setopt (c, CURLOPT_READDATA, &pos); + curl_easy_setopt (c, CURLOPT_UPLOAD, 1L); + curl_easy_setopt (c, CURLOPT_INFILESIZE, (long) PUT_SIZE); + curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); + curl_easy_setopt (c, CURLOPT_TIMEOUT_MS, CURL_TIMEOUT); + if (oneone) + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); + else + curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); + curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT_MS, CURL_TIMEOUT); + // NOTE: use of CONNECTTIMEOUT without also + // setting NOSIGNAL results in really weird + // crashes on my system! + curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1); + curl_easy_perform (c); curl_easy_cleanup (c); - MHD_stop_daemon (d); - return 2; } - curl_easy_cleanup (c); + fprintf (stderr, "\n"); MHD_stop_daemon (d); - if (cbc.pos != strlen ("/hello_world")) - return 4; - if (0 != strncmp ("/hello_world", cbc.buf, strlen ("/hello_world"))) - return 8; return 0; } diff --git a/src/testzzuf/socat.c b/src/testzzuf/socat.c index b8948575..0933010b 100644 --- a/src/testzzuf/socat.c +++ b/src/testzzuf/socat.c @@ -33,9 +33,10 @@ static pid_t zzuf_pid; static void -zzuf_socat_start() { +zzuf_socat_start () +{ int status; - char * const args[] = { + char *const args[] = { "zzuf", "--ratio=0.0:0.75", "-n", @@ -45,54 +46,48 @@ zzuf_socat_start() { "TCP4:127.0.0.1:11080", NULL, }; - zzuf_pid = fork(); - if (zzuf_pid == -1) { - fprintf(stderr, - "fork failed: %s\n", - strerror(errno)); - exit(1); - } + zzuf_pid = fork (); + if (zzuf_pid == -1) + { + fprintf (stderr, "fork failed: %s\n", strerror (errno)); + exit (1); + } if (zzuf_pid != 0) { - sleep(1); /* allow zzuf and socat to start */ + sleep (1); /* allow zzuf and socat to start */ status = 0; - if (0 < waitpid(zzuf_pid, &status, WNOHANG)) - { - if (WIFEXITED(status)) - fprintf(stderr, - "zzuf died with status code %d!\n", - WEXITSTATUS(status)); - if (WIFSIGNALED(status)) - fprintf(stderr, - "zzuf died from signal %d!\n", - WTERMSIG(status)); - exit(1); - } + if (0 < waitpid (zzuf_pid, &status, WNOHANG)) + { + if (WIFEXITED (status)) + fprintf (stderr, + "zzuf died with status code %d!\n", + WEXITSTATUS (status)); + if (WIFSIGNALED (status)) + fprintf (stderr, + "zzuf died from signal %d!\n", WTERMSIG (status)); + exit (1); + } return; } - setpgrp(); - execvp("zzuf", - args); - fprintf(stderr, - "execution of `zzuf' failed: %s\n", - strerror(errno)); - zzuf_pid = 0; /* fork failed */ - exit(1); + setpgrp (); + execvp ("zzuf", args); + fprintf (stderr, "execution of `zzuf' failed: %s\n", strerror (errno)); + zzuf_pid = 0; /* fork failed */ + exit (1); } static void -zzuf_socat_stop() { +zzuf_socat_stop () +{ int status; if (zzuf_pid != 0) { - if (0 != killpg(zzuf_pid, SIGINT)) - fprintf(stderr, - "Failed to killpg: %s\n", - strerror(errno)); - kill(zzuf_pid, SIGINT); - waitpid(zzuf_pid, &status, 0); - sleep(1); /* allow socat to also die in peace */ + if (0 != killpg (zzuf_pid, SIGINT)) + fprintf (stderr, "Failed to killpg: %s\n", strerror (errno)); + kill (zzuf_pid, SIGINT); + waitpid (zzuf_pid, &status, 0); + sleep (1); /* allow socat to also die in peace */ } } |