diff options
Diffstat (limited to 'lib/libmicrohttpd/src/testcurl/daemontest_iplimit.c')
-rw-r--r-- | lib/libmicrohttpd/src/testcurl/daemontest_iplimit.c | 301 |
1 files changed, 0 insertions, 301 deletions
diff --git a/lib/libmicrohttpd/src/testcurl/daemontest_iplimit.c b/lib/libmicrohttpd/src/testcurl/daemontest_iplimit.c deleted file mode 100644 index 93e6b06c78..0000000000 --- a/lib/libmicrohttpd/src/testcurl/daemontest_iplimit.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - This file is part of libmicrohttpd - (C) 2007 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 - by the Free Software Foundation; either version 2, or (at your - option) any later version. - - libmicrohttpd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with libmicrohttpd; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -/** - * @file daemontest_get.c - * @brief Testcase for libmicrohttpd GET operations - * TODO: test parsing of query - * @author Christian Grothoff - */ - -#include "MHD_config.h" -#include "platform.h" -#include <curl/curl.h> -#include <microhttpd.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> - -#ifndef WINDOWS -#include <unistd.h> -#endif - -static int oneone; - -struct CBC -{ - char *buf; - size_t pos; - size_t size; -}; - -static size_t -copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx) -{ - struct CBC *cbc = ctx; - - if (cbc->pos + size * nmemb > cbc->size) - return 0; /* overflow */ - memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb); - cbc->pos += size * nmemb; - return size * nmemb; -} - -static int -ahc_echo (void *cls, - struct MHD_Connection *connection, - const char *url, - const char *method, - const char *version, - const char *upload_data, size_t *upload_data_size, - void **unused) -{ - static int ptr; - const char *me = cls; - struct MHD_Response *response; - int ret; - - if (0 != strcmp (me, method)) - return MHD_NO; /* unexpected method */ - if (&ptr != *unused) - { - *unused = &ptr; - return MHD_YES; - } - *unused = NULL; - response = MHD_create_response_from_data (strlen (url), - (void *) url, MHD_NO, MHD_YES); - ret = MHD_queue_response (connection, MHD_HTTP_OK, response); - MHD_destroy_response (response); - if (ret == MHD_NO) - abort (); - return ret; -} - -static int -testMultithreadedGet () -{ - struct MHD_Daemon *d; - char buf[2048]; - int k; - - /* Test only valid for HTTP/1.1 (uses persistent connections) */ - if (!oneone) - return 0; - - d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG, - 1081, NULL, NULL, &ahc_echo, "GET", - MHD_OPTION_PER_IP_CONNECTION_LIMIT, 2, - MHD_OPTION_END); - if (d == NULL) - return 16; - - for (k = 0; k < 3; ++k) - { - struct CBC cbc[3]; - CURL *cenv[3]; - int i; - - for (i = 0; i < 3; ++i) - { - CURL *c; - CURLcode errornum; - - cenv[i] = c = curl_easy_init (); - cbc[i].buf = buf; - cbc[i].size = 2048; - cbc[i].pos = 0; - - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc[i]); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L); - curl_easy_setopt (c, CURLOPT_FORBID_REUSE, 0L); - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - 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); - - errornum = curl_easy_perform (c); - if ( ( (CURLE_OK != errornum) && (i < 2) ) || - ( (CURLE_OK == errornum) && (i == 2) ) ) - { - int j; - - /* First 2 should succeed */ - if (i < 2) - fprintf (stderr, - "curl_easy_perform failed: `%s'\n", - curl_easy_strerror (errornum)); - - /* Last request should have failed */ - else - fprintf (stderr, - "No error on IP address over limit\n"); - - for (j = 0; j < i; ++j) - curl_easy_cleanup (cenv[j]); - MHD_stop_daemon (d); - return 32; - } - } - - /* Cleanup the environments */ - for (i = 0; i < 3; ++i) - curl_easy_cleanup (cenv[i]); - - sleep(2); - - for (i = 0; i < 2; ++i) - { - if (cbc[i].pos != strlen ("/hello_world")) - { - MHD_stop_daemon (d); - return 64; - } - if (0 != strncmp ("/hello_world", cbc[i].buf, strlen ("/hello_world"))) - { - MHD_stop_daemon (d); - return 128; - } - } - - - } - MHD_stop_daemon (d); - return 0; -} - -static int -testMultithreadedPoolGet () -{ - struct MHD_Daemon *d; - char buf[2048]; - int k; - - /* Test only valid for HTTP/1.1 (uses persistent connections) */ - if (!oneone) - return 0; - - d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG, - 1081, NULL, NULL, &ahc_echo, "GET", - MHD_OPTION_PER_IP_CONNECTION_LIMIT, 2, - MHD_OPTION_THREAD_POOL_SIZE, 4, - MHD_OPTION_END); - if (d == NULL) - return 16; - - for (k = 0; k < 3; ++k) - { - struct CBC cbc[3]; - CURL *cenv[3]; - int i; - - for (i = 0; i < 3; ++i) - { - CURL *c; - CURLcode errornum; - - cenv[i] = c = curl_easy_init (); - cbc[i].buf = buf; - cbc[i].size = 2048; - cbc[i].pos = 0; - - curl_easy_setopt (c, CURLOPT_URL, "http://localhost:1081/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer); - curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc[i]); - curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); - curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L); - curl_easy_setopt (c, CURLOPT_FORBID_REUSE, 0L); - curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); - 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); - - errornum = curl_easy_perform (c); - if ( ( (CURLE_OK != errornum) && (i < 2) ) || - ( (CURLE_OK == errornum) && (i == 2) ) ) - { - int j; - - /* First 2 should succeed */ - if (i < 2) - fprintf (stderr, - "curl_easy_perform failed: `%s'\n", - curl_easy_strerror (errornum)); - - /* Last request should have failed */ - else - fprintf (stderr, - "No error on IP address over limit\n"); - - for (j = 0; j < i; ++j) - curl_easy_cleanup (cenv[j]); - MHD_stop_daemon (d); - return 32; - } - } - - /* Cleanup the environments */ - for (i = 0; i < 3; ++i) - curl_easy_cleanup (cenv[i]); - - sleep(2); - - for (i = 0; i < 2; ++i) - { - if (cbc[i].pos != strlen ("/hello_world")) - { - MHD_stop_daemon (d); - return 64; - } - if (0 != strncmp ("/hello_world", cbc[i].buf, strlen ("/hello_world"))) - { - MHD_stop_daemon (d); - return 128; - } - } - - - } - MHD_stop_daemon (d); - return 0; -} - -int -main (int argc, char *const *argv) -{ - unsigned int errorCount = 0; - - oneone = NULL != strstr (argv[0], "11"); - if (0 != curl_global_init (CURL_GLOBAL_WIN32)) - return 2; - errorCount += testMultithreadedGet (); - errorCount += testMultithreadedPoolGet (); - if (errorCount != 0) - fprintf (stderr, "Error (code: %u)\n", errorCount); - curl_global_cleanup (); - return errorCount != 0; /* 0 == pass */ -} |