libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit e8d937beb5e0bf118c381846f2392cab973a2528
parent 36bf651023e2f810bd2ae4aa1ab2354338b9f00c
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Fri, 16 Jun 2017 00:41:21 +0300

Make testsuite parallel build compatible (part 1)

Diffstat:
Msrc/microhttpd/test_daemon.c | 14+++++++-------
Msrc/microhttpd/test_upgrade.c | 14++++++++++----
Msrc/testcurl/perf_get.c | 52+++++++++++++++++++++++++++++++++++++++++++++++-----
Msrc/testcurl/perf_get_concurrent.c | 48+++++++++++++++++++++++++++++++++++++++++++++++-
Msrc/testcurl/test_callback.c | 21+++++++++++++++++++--
Msrc/testcurl/test_concurrent_stop.c | 25++++++++++++++++++++++++-
Msrc/testcurl/test_delete.c | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Msrc/testcurl/test_digestauth.c | 20++++++++++++++++++--
Msrc/testcurl/test_digestauth_with_arguments.c | 20++++++++++++++++++--
Msrc/testcurl/test_get.c | 173+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Msrc/testcurl/test_get_chunked.c | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Msrc/testcurl/test_get_response_cleanup.c | 98+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Msrc/testcurl/test_get_sendfile.c | 125+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Msrc/testcurl/test_iplimit.c | 45+++++++++++++++++++++++++++++++++++++++++----
Msrc/testcurl/test_large_put.c | 100++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Msrc/testcurl/test_long_header.c | 45+++++++++++++++++++++++++++++++++++++++++----
Msrc/testcurl/test_options.c | 8++++----
Msrc/testcurl/test_parse_cookies.c | 23+++++++++++++++++++++--
Msrc/testcurl/test_post.c | 115++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Msrc/testcurl/test_post_loop.c | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Msrc/testcurl/test_postform.c | 92++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Msrc/testcurl/test_process_arguments.c | 23+++++++++++++++++++++--
Msrc/testcurl/test_process_headers.c | 96++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
Msrc/testcurl/test_put.c | 94+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Msrc/testcurl/test_put_chunked.c | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Msrc/testcurl/test_quiesce.c | 38+++++++++++++++++++++++++++++++++-----
Msrc/testcurl/test_quiesce_stream.c | 25++++++++++++++++++++++---
Msrc/testcurl/test_start_stop.c | 8++++----
Msrc/testcurl/test_termination.c | 20+++++++++++++++++---
Msrc/testcurl/test_timeout.c | 46++++++++++++++++++++++++++++++++++++++++++----
Msrc/testcurl/test_urlparse.c | 23+++++++++++++++++++++--
31 files changed, 1537 insertions(+), 190 deletions(-)

diff --git a/src/microhttpd/test_daemon.c b/src/microhttpd/test_daemon.c @@ -89,7 +89,7 @@ testStartStop () struct MHD_Daemon *d; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1080, + 0, &apc_nothing, NULL, &ahc_nothing, NULL, MHD_OPTION_END); @@ -97,7 +97,7 @@ testStartStop () { fprintf (stderr, "Failed to start daemon on port %u\n", - 1080); + 0); exit (77); } MHD_stop_daemon (d); @@ -114,7 +114,7 @@ testExternalRun () int i; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1081, + 0, &apc_all, NULL, &ahc_nothing, NULL, MHD_OPTION_END); @@ -123,7 +123,7 @@ testExternalRun () { fprintf (stderr, "Failed to start daemon on port %u\n", - 1081); + 0); exit (77); } i = 0; @@ -158,7 +158,7 @@ testThread () struct MHD_Daemon *d; d = MHD_start_daemon (MHD_USE_ERROR_LOG | MHD_USE_INTERNAL_POLLING_THREAD, - 1082, + 0, &apc_all, NULL, &ahc_nothing, NULL, MHD_OPTION_END); @@ -187,7 +187,7 @@ testMultithread () struct MHD_Daemon *d; d = MHD_start_daemon (MHD_USE_ERROR_LOG | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_THREAD_PER_CONNECTION, - 1083, + 0, &apc_all, NULL, &ahc_nothing, NULL, MHD_OPTION_END); @@ -196,7 +196,7 @@ testMultithread () { fprintf (stderr, "Failed to start daemon on port %u\n", - 1083); + 0); exit (77); } if (MHD_run (d) != MHD_NO) diff --git a/src/microhttpd/test_upgrade.c b/src/microhttpd/test_upgrade.c @@ -982,6 +982,7 @@ test_upgrade (int flags, wr_socket sock; struct sockaddr_in sa; const union MHD_DaemonInfo *real_flags; + const union MHD_DaemonInfo *dinfo; #if defined(HTTPS_SUPPORT) && defined(HAVE_FORK) && defined(HAVE_WAITPID) pid_t pid = -1; #endif /* HTTPS_SUPPORT && HAVE_FORK && HAVE_WAITPID */ @@ -990,7 +991,8 @@ test_upgrade (int flags, if (!test_tls) d = MHD_start_daemon (flags | MHD_USE_ERROR_LOG | MHD_ALLOW_UPGRADE, - 1080, + MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT) ? + 0 : 1090, NULL, NULL, &ahc_upgrade, NULL, MHD_OPTION_URI_LOG_CALLBACK, &log_cb, NULL, @@ -1001,7 +1003,8 @@ test_upgrade (int flags, #ifdef HTTPS_SUPPORT else d = MHD_start_daemon (flags | MHD_USE_ERROR_LOG | MHD_ALLOW_UPGRADE | MHD_USE_TLS, - 1080, + MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT) ? + 0 : 1090, NULL, NULL, &ahc_upgrade, NULL, MHD_OPTION_URI_LOG_CALLBACK, &log_cb, NULL, @@ -1017,13 +1020,16 @@ test_upgrade (int flags, real_flags = MHD_get_daemon_info(d, MHD_DAEMON_INFO_FLAGS); if (NULL == real_flags) abort (); + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + abort (); if (!test_tls || TLS_LIB_GNUTLS == use_tls_tool) { sock = test_tls ? wr_create_tls_sckt () : wr_create_plain_sckt (); if (WR_BAD == sock) abort (); sa.sin_family = AF_INET; - sa.sin_port = htons (1080); + sa.sin_port = htons (dinfo->port); sa.sin_addr.s_addr = htonl (INADDR_LOOPBACK); if (0 != wr_connect (sock, (struct sockaddr *) &sa, @@ -1034,7 +1040,7 @@ test_upgrade (int flags, { #if defined(HTTPS_SUPPORT) && defined(HAVE_FORK) && defined(HAVE_WAITPID) MHD_socket tls_fork_sock; - if (-1 == (pid = gnutlscli_connect (&tls_fork_sock, 1080))) + if (-1 == (pid = gnutlscli_connect (&tls_fork_sock, dinfo->port))) { MHD_stop_daemon (d); return 4; diff --git a/src/testcurl/perf_get.c b/src/testcurl/perf_get.c @@ -188,7 +188,8 @@ testInternalGet (int port, int poll_flag) unsigned int i; char url[64]; - sprintf(url, "http://127.0.0.1:%d/hello_world", port); + if (MHD_NO != MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; cbc.buf = buf; cbc.size = 2048; @@ -196,6 +197,15 @@ testInternalGet (int port, int poll_flag) port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/hello_world", port); start_timer (); for (i=0;i<ROUNDS;i++) { @@ -249,7 +259,8 @@ testMultithreadedGet (int port, int poll_flag) unsigned int i; char url[64]; - sprintf(url, "http://127.0.0.1:%d/hello_world", port); + if (MHD_NO != MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; cbc.buf = buf; cbc.size = 2048; @@ -257,6 +268,15 @@ testMultithreadedGet (int port, int poll_flag) port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/hello_world", port); start_timer (); for (i=0;i<ROUNDS;i++) { @@ -310,7 +330,8 @@ testMultithreadedPoolGet (int port, int poll_flag) unsigned int i; char url[64]; - sprintf(url, "http://127.0.0.1:%d/hello_world", port); + if (MHD_NO != MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; cbc.buf = buf; cbc.size = 2048; @@ -319,6 +340,15 @@ testMultithreadedPoolGet (int port, int poll_flag) MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/hello_world", port); start_timer (); for (i=0;i<ROUNDS;i++) { @@ -385,7 +415,8 @@ testExternalGet (int port) unsigned int i; char url[64]; - sprintf(url, "http://127.0.0.1:%d/hello_world", port); + if (MHD_NO != MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; multi = NULL; cbc.buf = buf; @@ -394,6 +425,15 @@ testExternalGet (int port) port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/hello_world", port); start_timer (); multi = curl_multi_init (); if (multi == NULL) @@ -514,10 +554,12 @@ int main (int argc, char *const *argv) { unsigned int errorCount = 0; - int port = 1081; + int port = 1130; oneone = (NULL != strrchr (argv[0], (int) '/')) ? (NULL != strstr (strrchr (argv[0], (int) '/'), "11")) : 0; + if (oneone) + port += 15; if (0 != curl_global_init (CURL_GLOBAL_WIN32)) return 2; response = MHD_create_response_from_buffer (strlen ("/hello_world"), diff --git a/src/testcurl/perf_get_concurrent.c b/src/testcurl/perf_get_concurrent.c @@ -247,11 +247,22 @@ testInternalGet (int port, int poll_flag) (poll_flag & MHD_USE_EPOLL) ? "internal thread with epoll" : "internal thread with select()"); const char * ret_val; + if (MHD_NO != MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + signal_done = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } start_timer (); ret_val = do_gets ((void*)(intptr_t)port); if (!ret_val) @@ -277,11 +288,22 @@ testMultithreadedGet (int port, int poll_flag) : "internal thread with select() and thread per connection"); const char * ret_val; + if (MHD_NO != MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + signal_done = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } start_timer (); ret_val = do_gets ((void*)(intptr_t)port); if (!ret_val) @@ -306,12 +328,23 @@ testMultithreadedPoolGet (int port, int poll_flag) (poll_flag & MHD_USE_EPOLL) ? "internal thread poll with epoll" : "internal thread pool with select()"); const char * ret_val; + if (MHD_NO != MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + signal_done = 0 ; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } start_timer (); ret_val = do_gets ((void*)(intptr_t)port); if (!ret_val) @@ -342,11 +375,22 @@ testExternalGet (int port) char *ret_val; int ret = 0; + if (MHD_NO != MHD_is_feature_supported(MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + signal_done = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } if (0 != pthread_create (&pid, NULL, &do_gets, (void*)(intptr_t)port)) { @@ -402,10 +446,12 @@ int main (int argc, char *const *argv) { unsigned int errorCount = 0; - int port = 1081; + int port = 1100; oneone = (NULL != strrchr (argv[0], (int) '/')) ? (NULL != strstr (strrchr (argv[0], (int) '/'), "11")) : 0; + if (oneone) + port += 15; if (0 != curl_global_init (CURL_GLOBAL_WIN32)) return 2; response = MHD_create_response_from_buffer (strlen ("/hello_world"), diff --git a/src/testcurl/test_callback.c b/src/testcurl/test_callback.c @@ -111,16 +111,33 @@ main(int argc, char **argv) int running; struct timeval tv; int extra; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1140; d = MHD_start_daemon(0, - 8000, + port, NULL, NULL, &callback, NULL, MHD_OPTION_END); + if (d == NULL) + return 32; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 48; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:8000/"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &discard_buffer); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); diff --git a/src/testcurl/test_concurrent_stop.c b/src/testcurl/test_concurrent_stop.c @@ -217,6 +217,14 @@ testMultithreadedGet (int port, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } p = start_gets (port); sleep (1); MHD_stop_daemon (d); @@ -240,6 +248,14 @@ testMultithreadedPoolGet (int port, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } p = start_gets (port); sleep (1); MHD_stop_daemon (d); @@ -252,10 +268,17 @@ int main (int argc, char *const *argv) { unsigned int errorCount = 0; - int port = 1081; + int port; + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1142; + oneone = (NULL != strrchr (argv[0], (int) '/')) ? (NULL != strstr (strrchr (argv[0], (int) '/'), "11")) : 0; + if (0 != port && oneone) + port += 5; if (0 != curl_global_init (CURL_GLOBAL_WIN32)) return 2; response = MHD_create_response_from_buffer (strlen ("/hello_world"), diff --git a/src/testcurl/test_delete.c b/src/testcurl/test_delete.c @@ -127,17 +127,32 @@ testInternalDelete () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1152; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1080, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -185,17 +200,32 @@ testMultithreadedDelete () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1153; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -243,18 +273,33 @@ testMultithreadedPoolDelete () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1154; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -317,18 +362,33 @@ testExternalDelete () struct timeval tv; unsigned int pos = 0; int done_flag = 0; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1154; multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1082/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); diff --git a/src/testcurl/test_digestauth.c b/src/testcurl/test_digestauth.c @@ -140,6 +140,13 @@ testDigestAuth () size_t off = 0; char buf[2048]; char rnd[8]; + int port; + char url[128]; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1165; cbc.buf = buf; cbc.size = 2048; @@ -190,14 +197,23 @@ testDigestAuth () } #endif d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1337, NULL, NULL, &ahc_echo, PAGE, + port, NULL, NULL, &ahc_echo, PAGE, MHD_OPTION_DIGEST_AUTH_RANDOM, sizeof (rnd), rnd, MHD_OPTION_NONCE_NC_SIZE, 300, MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/bar%%20 foo?a=bü%%20", port); c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1337/bar%20 foo?a=bü%20"); + curl_easy_setopt (c, CURLOPT_URL, url); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); diff --git a/src/testcurl/test_digestauth_with_arguments.c b/src/testcurl/test_digestauth_with_arguments.c @@ -135,6 +135,13 @@ testDigestAuth () size_t off = 0; char buf[2048]; char rnd[8]; + int port; + char url[128]; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1160; cbc.buf = buf; cbc.size = 2048; @@ -185,14 +192,23 @@ testDigestAuth () } #endif d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1337, NULL, NULL, &ahc_echo, PAGE, + port, NULL, NULL, &ahc_echo, PAGE, MHD_OPTION_DIGEST_AUTH_RANDOM, sizeof (rnd), rnd, MHD_OPTION_NONCE_NC_SIZE, 300, MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/foo?key=value", port); c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1337/foo?key=value"); + curl_easy_setopt (c, CURLOPT_URL, url); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); diff --git a/src/testcurl/test_get.c b/src/testcurl/test_get.c @@ -116,16 +116,35 @@ testInternalGet (int poll_flag) char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1220; + if (oneone) + port += 20; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:11080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -166,16 +185,35 @@ testMultithreadedGet (int poll_flag) char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1221; + if (oneone) + port += 20; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 1081, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -216,17 +254,36 @@ testMultithreadedPoolGet (int poll_flag) char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1222; + if (oneone) + port += 20; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 1081, NULL, NULL, &ahc_echo, "GET", + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -281,17 +338,36 @@ testExternalGet () struct CURLMsg *msg; time_t start; struct timeval tv; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1223; + if (oneone) + port += 20; + } multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1082/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -401,6 +477,7 @@ testUnknownPortGet (int poll_flag) char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; struct sockaddr_in addr; socklen_t addr_len = sizeof(addr); @@ -413,24 +490,33 @@ testUnknownPortGet (int poll_flag) cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 1, NULL, NULL, &ahc_echo, "GET", + 0, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_SOCK_ADDR, &addr, MHD_OPTION_END); - if (d == NULL) - return 32768; - - di = MHD_get_daemon_info (d, MHD_DAEMON_INFO_LISTEN_FD); - if (di == NULL) - return 65536; + if (MHD_NO == MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + { + di = MHD_get_daemon_info (d, MHD_DAEMON_INFO_LISTEN_FD); + if (di == NULL) + return 65536; - if (0 != getsockname(di->listen_fd, (struct sockaddr *) &addr, &addr_len)) - return 131072; + if (0 != getsockname(di->listen_fd, (struct sockaddr *) &addr, &addr_len)) + return 131072; - if (addr.sin_family != AF_INET) - return 26214; + if (addr.sin_family != AF_INET) + return 26214; + port = (int)ntohs(addr.sin_port); + } + else + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } - snprintf(buf, sizeof(buf), "http://127.0.0.1:%hu/hello_world", - ntohs(addr.sin_port)); + snprintf(buf, sizeof(buf), "http://127.0.0.1:%d/hello_world", + port); c = curl_easy_init (); curl_easy_setopt (c, CURLOPT_URL, buf); @@ -472,11 +558,29 @@ testStopRace (int poll_flag) struct sockaddr_in sin; MHD_socket fd; struct MHD_Daemon *d; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1224; + if (oneone) + port += 20; + } d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 1081, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } fd = socket (PF_INET, SOCK_STREAM, 0); if (fd == MHD_INVALID_SOCKET) @@ -487,7 +591,7 @@ testStopRace (int poll_flag) memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; - sin.sin_port = htons(1081); + sin.sin_port = htons(port); sin.sin_addr.s_addr = htonl(0x7f000001); if (connect (fd, (struct sockaddr *)(&sin), sizeof(sin)) < 0) @@ -566,16 +670,35 @@ testEmptyGet (int poll_flag) struct CBC cbc; CURLcode errornum; int excess_found = 0; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1225; + if (oneone) + port += 20; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 11081, NULL, NULL, &ahc_empty, NULL, MHD_OPTION_END); + port, NULL, NULL, &ahc_empty, NULL, MHD_OPTION_END); if (d == NULL) return 4194304; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:11081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_DEBUGFUNCTION, &curlExcessFound); diff --git a/src/testcurl/test_get_chunked.c b/src/testcurl/test_get_chunked.c @@ -160,16 +160,31 @@ testInternalGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1170; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -202,16 +217,31 @@ testMultithreadedGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1171; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -244,17 +274,32 @@ testMultithreadedPoolGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1172; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, "GET", + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -301,17 +346,32 @@ testExternalGet () struct CURLMsg *msg; time_t start; struct timeval tv; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1173; multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1082/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); diff --git a/src/testcurl/test_get_response_cleanup.c b/src/testcurl/test_get_response_cleanup.c @@ -153,13 +153,33 @@ testInternalGet () { struct MHD_Daemon *d; pid_t curl; + int port; + char url[127]; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1180; + if (oneone) + port += 10; + } ok = 1; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; - curl = fork_curl ("http://127.0.0.1:11080/"); + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/", port); + curl = fork_curl (url); sleep (1); kill_curl (curl); sleep (1); @@ -176,20 +196,40 @@ testMultithreadedGet () { struct MHD_Daemon *d; pid_t curl; + int port; + char url[127]; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1181; + if (oneone) + port += 10; + } ok = 1; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, "GET", + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 2, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/", port); //fprintf (stderr, "Forking cURL!\n"); - curl = fork_curl ("http://127.0.0.1:1081/"); + curl = fork_curl (url); sleep (1); kill_curl (curl); sleep (1); - curl = fork_curl ("http://127.0.0.1:1081/"); + curl = fork_curl (url); sleep (1); if (ok != 0) { @@ -213,14 +253,34 @@ testMultithreadedPoolGet () { struct MHD_Daemon *d; pid_t curl; + int port; + char url[127]; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1182; + if (oneone) + port += 10; + } ok = 1; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, "GET", + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 64; - curl = fork_curl ("http://127.0.0.1:1081/"); + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/", port); + curl = fork_curl (url); sleep (1); kill_curl (curl); sleep (1); @@ -243,13 +303,33 @@ testExternalGet () time_t start; struct timeval tv; pid_t curl; + int port; + char url[127]; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1183; + if (oneone) + port += 10; + } ok = 1; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; - curl = fork_curl ("http://127.0.0.1:1082/"); + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } + sprintf(url, "http://127.0.0.1:%d/", port); + curl = fork_curl (url); start = time (NULL); while ((time (NULL) - start < 2)) diff --git a/src/testcurl/test_get_sendfile.c b/src/testcurl/test_get_sendfile.c @@ -121,16 +121,35 @@ testInternalGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1200; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:11080/"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -171,16 +190,35 @@ testMultithreadedGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1201; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -221,17 +259,36 @@ testMultithreadedPoolGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1202; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, "GET", + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -286,17 +343,36 @@ testExternalGet () struct CURLMsg *msg; time_t start; struct timeval tv; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1203; + if (oneone) + port += 10; + } multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1082/"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -406,6 +482,7 @@ testUnknownPortGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; struct sockaddr_in addr; socklen_t addr_len = sizeof(addr); @@ -418,24 +495,36 @@ testUnknownPortGet () cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1, NULL, NULL, &ahc_echo, "GET", + 0, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_SOCK_ADDR, &addr, MHD_OPTION_END); if (d == NULL) return 32768; - di = MHD_get_daemon_info (d, MHD_DAEMON_INFO_LISTEN_FD); - if (di == NULL) - return 65536; + if (MHD_NO == MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + { + di = MHD_get_daemon_info (d, MHD_DAEMON_INFO_LISTEN_FD); + if (di == NULL) + return 65536; - if (0 != getsockname(di->listen_fd, (struct sockaddr *) &addr, &addr_len)) - return 131072; + if (0 != getsockname(di->listen_fd, (struct sockaddr *) &addr, &addr_len)) + return 131072; - if (addr.sin_family != AF_INET) - return 26214; + if (addr.sin_family != AF_INET) + return 26214; + port = (int)ntohs(addr.sin_port); + } + else + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } - snprintf(buf, sizeof(buf), "http://127.0.0.1:%hu/", - ntohs(addr.sin_port)); + snprintf(buf, sizeof(buf), "http://127.0.0.1:%d/", + port); c = curl_easy_init (); curl_easy_setopt (c, CURLOPT_URL, buf); diff --git a/src/testcurl/test_iplimit.c b/src/testcurl/test_iplimit.c @@ -112,18 +112,36 @@ testMultithreadedGet () int k; unsigned int success; unsigned int failure; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1260; + if (oneone) + port += 5; + } /* Test only valid for HTTP/1.1 (uses persistent connections) */ if (!oneone) return 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_PER_IP_CONNECTION_LIMIT, 2, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } for (k = 0; k < 3; ++k) { @@ -143,7 +161,8 @@ testMultithreadedGet () cbc[i].size = 2048; cbc[i].pos = 0; - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc[i]); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -203,18 +222,35 @@ testMultithreadedPoolGet () struct MHD_Daemon *d; char buf[2048]; int k; + int port; + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1261; + if (oneone) + port += 5; + } /* Test only valid for HTTP/1.1 (uses persistent connections) */ if (!oneone) return 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, "GET", + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_PER_IP_CONNECTION_LIMIT, 2, MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } for (k = 0; k < 3; ++k) { @@ -232,7 +268,8 @@ testMultithreadedPoolGet () cbc[i].size = 2048; cbc[i].pos = 0; - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc[i]); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); diff --git a/src/testcurl/test_large_put.c b/src/testcurl/test_large_put.c @@ -182,19 +182,40 @@ testPutInternalThread (unsigned int add_flag) int done_flag = 0; CURLcode errornum; char buf[2048]; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1270; + if (oneone) + port += 10; + if (incr_read) + port += 20; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | add_flag, - 1080, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t)(incr_read ? 1024 : (PUT_SIZE * 4)), MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -240,20 +261,41 @@ testPutThreadPerConn (unsigned int add_flag) int done_flag = 0; CURLcode errornum; char buf[2048]; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1271; + if (oneone) + port += 10; + if (incr_read) + port += 20; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | add_flag, - 1081, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t)(incr_read ? 1024 : (PUT_SIZE * 4)), MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -302,20 +344,41 @@ testPutThreadPool (unsigned int add_flag) int done_flag = 0; CURLcode errornum; char buf[2048]; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1272; + if (oneone) + port += 10; + if (incr_read) + port += 20; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | add_flag, - 1081, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t)(incr_read ? 1024 : (PUT_SIZE * 4)), MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -378,20 +441,41 @@ testPutExternal (void) size_t pos = 0; int done_flag = 0; char buf[2048]; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1273; + if (oneone) + port += 10; + if (incr_read) + port += 20; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; multi = NULL; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t)(incr_read ? 1024 : (PUT_SIZE * 4)), MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1082/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); diff --git a/src/testcurl/test_long_header.c b/src/testcurl/test_long_header.c @@ -97,12 +97,21 @@ testLongUrlGet () struct CBC cbc; char *url; long code; + int port; + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1330; + if (oneone) + port += 5; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD /* | MHD_USE_ERROR_LOG */ , - 1080, + port, &apc_all, NULL, &ahc_echo, @@ -111,6 +120,14 @@ testLongUrlGet () (size_t) (VERY_LONG / 2), MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); url = malloc (VERY_LONG); if (url == NULL) @@ -120,8 +137,9 @@ testLongUrlGet () } memset (url, 'a', VERY_LONG); url[VERY_LONG - 1] = '\0'; - memcpy (url, "http://127.0.0.1:1080/", strlen ("http://127.0.0.1:1080/")); + memcpy (url, "http://127.0.0.1/", strlen ("http://127.0.0.1/")); curl_easy_setopt (c, CURLOPT_URL, url); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -168,12 +186,22 @@ testLongHeaderGet () char *url; long code; struct curl_slist *header = NULL; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1331; + if (oneone) + port += 5; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD /* | MHD_USE_ERROR_LOG */ , - 1080, + port, &apc_all, NULL, &ahc_echo, @@ -182,6 +210,14 @@ testLongHeaderGet () (size_t) (VERY_LONG / 2), MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); url = malloc (VERY_LONG); if (url == NULL) @@ -196,7 +232,8 @@ testLongHeaderGet () header = curl_slist_append (header, url); curl_easy_setopt (c, CURLOPT_HTTPHEADER, header); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); diff --git a/src/testcurl/test_options.c b/src/testcurl/test_options.c @@ -80,17 +80,17 @@ test_ip_addr_option () memset (&daemon_ip_addr, 0, sizeof (struct sockaddr_in)); daemon_ip_addr.sin_family = AF_INET; - daemon_ip_addr.sin_port = htons (4233); + daemon_ip_addr.sin_port = 0; daemon_ip_addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); #if HAVE_INET6 memset (&daemon_ip_addr6, 0, sizeof (struct sockaddr_in6)); daemon_ip_addr6.sin6_family = AF_INET6; - daemon_ip_addr6.sin6_port = htons (4233); + daemon_ip_addr6.sin6_port = 0; daemon_ip_addr6.sin6_addr = in6addr_loopback; #endif - d = MHD_start_daemon (MHD_USE_ERROR_LOG, 4233, + d = MHD_start_daemon (MHD_USE_ERROR_LOG, 0, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_SOCK_ADDR, &daemon_ip_addr, MHD_OPTION_END); @@ -100,7 +100,7 @@ test_ip_addr_option () MHD_stop_daemon (d); #if HAVE_INET6 - d = MHD_start_daemon (MHD_USE_ERROR_LOG | MHD_USE_IPv6, 4233, + d = MHD_start_daemon (MHD_USE_ERROR_LOG | MHD_USE_IPv6, 0, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_SOCK_ADDR, &daemon_ip_addr6, MHD_OPTION_END); diff --git a/src/testcurl/test_parse_cookies.c b/src/testcurl/test_parse_cookies.c @@ -126,17 +126,36 @@ testExternalGet () struct CURLMsg *msg; time_t start; struct timeval tv; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1340; + if (oneone) + port += 5; + } multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:21080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); diff --git a/src/testcurl/test_post.c b/src/testcurl/test_post.c @@ -166,18 +166,37 @@ testInternalPost () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1370; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1080, NULL, NULL, &ahc_echo, NULL, + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_NOTIFY_COMPLETED, &completed_cb, NULL, MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); @@ -220,18 +239,37 @@ testMultithreadedPost () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1371; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, NULL, + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_NOTIFY_COMPLETED, &completed_cb, NULL, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); @@ -274,19 +312,38 @@ testMultithreadedPoolPost () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1372; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, NULL, + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_NOTIFY_COMPLETED, &completed_cb, NULL, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); @@ -343,19 +400,38 @@ testExternalPost () struct CURLMsg *msg; time_t start; struct timeval tv; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1373; + if (oneone) + port += 10; + } multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, NULL, NULL, &ahc_echo, NULL, + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_NOTIFY_COMPLETED, &completed_cb, NULL, MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1082/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_POSTFIELDS, POST_DATA); @@ -550,6 +626,16 @@ testMultithreadedPostCancelPart(int flags) CURLcode cc; int result = 0; struct CRBC crbc; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1374; + if (oneone) + port += 10; + } /* Don't test features that aren't available with HTTP/1.0 in * HTTP/1.0 mode. */ @@ -560,17 +646,26 @@ testMultithreadedPostCancelPart(int flags) cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_cancel, NULL, + port, NULL, NULL, &ahc_cancel, NULL, MHD_OPTION_END); if (d == NULL) return 32768; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } crbc.buffer = "Test content"; crbc.size = strlen(crbc.buffer); crbc.pos = 0; c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, (flags & FLAG_SLOW_READ) ? &slowReadBuffer : &readBuffer); diff --git a/src/testcurl/test_post_loop.c b/src/testcurl/test_post_loop.c @@ -116,13 +116,31 @@ testInternalPost () CURLcode errornum; int i; char url[1024]; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1350; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1080, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } for (i = 0; i < LOOPCOUNT; i++) { if (99 == i % 100) @@ -130,7 +148,7 @@ testInternalPost () c = curl_easy_init (); cbc.pos = 0; buf[0] = '\0'; - sprintf (url, "http://127.0.0.1:1080/hw%d", i); + sprintf (url, "http://127.0.0.1:%d/hw%d", port, i); curl_easy_setopt (c, CURLOPT_URL, url); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); @@ -180,13 +198,31 @@ testMultithreadedPost () CURLcode errornum; int i; char url[1024]; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1351; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } for (i = 0; i < LOOPCOUNT; i++) { if (99 == i % 100) @@ -194,7 +230,7 @@ testMultithreadedPost () c = curl_easy_init (); cbc.pos = 0; buf[0] = '\0'; - sprintf (url, "http://127.0.0.1:1081/hw%d", i); + sprintf (url, "http://127.0.0.1:%d/hw%d", port, i); curl_easy_setopt (c, CURLOPT_URL, url); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); @@ -244,14 +280,32 @@ testMultithreadedPoolPost () CURLcode errornum; int i; char url[1024]; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1352; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, NULL, + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } for (i = 0; i < LOOPCOUNT; i++) { if (99 == i % 100) @@ -259,7 +313,7 @@ testMultithreadedPoolPost () c = curl_easy_init (); cbc.pos = 0; buf[0] = '\0'; - sprintf (url, "http://127.0.0.1:1081/hw%d", i); + sprintf (url, "http://127.0.0.1:%d/hw%d", port, i); curl_easy_setopt (c, CURLOPT_URL, url); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); @@ -325,15 +379,33 @@ testExternalPost () unsigned long long timeout; long ctimeout; char url[1024]; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1353; + if (oneone) + port += 10; + } multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } multi = curl_multi_init (); if (multi == NULL) { @@ -347,7 +419,7 @@ testExternalPost () c = curl_easy_init (); cbc.pos = 0; buf[0] = '\0'; - sprintf (url, "http://127.0.0.1:1082/hw%d", i); + sprintf (url, "http://127.0.0.1:%d/hw%d", port, i); curl_easy_setopt (c, CURLOPT_URL, url); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); diff --git a/src/testcurl/test_postform.c b/src/testcurl/test_postform.c @@ -179,18 +179,37 @@ testInternalPost () struct CBC cbc; CURLcode errornum; struct curl_httppost *pd; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1390; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1080, NULL, NULL, &ahc_echo, NULL, + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_NOTIFY_COMPLETED, &completed_cb, NULL, MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); pd = make_form (); @@ -235,18 +254,37 @@ testMultithreadedPost () struct CBC cbc; CURLcode errornum; struct curl_httppost *pd; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1390; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, NULL, + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_NOTIFY_COMPLETED, &completed_cb, NULL, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); pd = make_form (); @@ -291,19 +329,38 @@ testMultithreadedPoolPost () struct CBC cbc; CURLcode errornum; struct curl_httppost *pd; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1391; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, NULL, NULL, &ahc_echo, NULL, + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_NOTIFY_COMPLETED, &completed_cb, NULL, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); pd = make_form (); @@ -362,19 +419,38 @@ testExternalPost () time_t start; struct timeval tv; struct curl_httppost *pd; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1392; + if (oneone) + port += 10; + } multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, NULL, NULL, &ahc_echo, NULL, + port, NULL, NULL, &ahc_echo, NULL, MHD_OPTION_NOTIFY_COMPLETED, &completed_cb, NULL, MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1082/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); pd = make_form (); diff --git a/src/testcurl/test_process_arguments.c b/src/testcurl/test_process_arguments.c @@ -130,18 +130,37 @@ testExternalGet () struct CURLMsg *msg; time_t start; struct timeval tv; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1410; + if (oneone) + port += 5; + } multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); curl_easy_setopt (c, CURLOPT_URL, - "http://127.0.0.1:21080/hello+world?k=v+x&hash=%23foo&space=%A0bar"); + "http://127.0.0.1/hello+world?k=v+x&hash=%23foo&space=%A0bar"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); diff --git a/src/testcurl/test_process_headers.c b/src/testcurl/test_process_headers.c @@ -69,7 +69,7 @@ static int kv_cb (void *cls, enum MHD_ValueKind kind, const char *key, const char *value) { if ((0 == strcmp (key, MHD_HTTP_HEADER_HOST)) && - (0 == strcmp (value, "127.0.0.1:21080")) && (kind == MHD_HEADER_KIND)) + (0 == strncmp (value, "127.0.0.1", strlen("127.0.0.1"))) && (kind == MHD_HEADER_KIND)) { *((int *) cls) = 1; return MHD_NO; @@ -113,7 +113,7 @@ ahc_echo (void *cls, abort (); hdr = MHD_lookup_connection_value (connection, MHD_HEADER_KIND, MHD_HTTP_HEADER_HOST); - if ((hdr == NULL) || (0 != strcmp (hdr, "127.0.0.1:21080"))) + if ((hdr == NULL) || (0 != strncmp (hdr, "127.0.0.1", strlen("127.0.0.1")))) abort (); MHD_set_connection_value (connection, MHD_HEADER_KIND, "FakeHeader", "NowPresent"); @@ -153,16 +153,35 @@ testInternalGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1420; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:21080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -202,16 +221,35 @@ testMultithreadedGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1421; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:21080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -251,17 +289,36 @@ testMultithreadedPoolGet () char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1422; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 21080, NULL, NULL, &ahc_echo, "GET", + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:21080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -315,17 +372,36 @@ testExternalGet () struct CURLMsg *msg; time_t start; struct timeval tv; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1423; + if (oneone) + port += 10; + } multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 21080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:21080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); diff --git a/src/testcurl/test_put.c b/src/testcurl/test_put.c @@ -127,17 +127,36 @@ testInternalPut () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1450; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1080, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -183,17 +202,36 @@ testMultithreadedPut () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1451; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -240,18 +278,37 @@ testMultithreadedPoolPut () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1452; + if (oneone) + port += 10; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1081, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -313,19 +370,38 @@ testExternalPut () struct timeval tv; unsigned int pos = 0; int done_flag = 0; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1453; + if (oneone) + port += 10; + } multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1082/hello_world"); - curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); +curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); curl_easy_setopt (c, CURLOPT_READDATA, &pos); diff --git a/src/testcurl/test_put_chunked.c b/src/testcurl/test_put_chunked.c @@ -137,17 +137,32 @@ testInternalPut () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1440; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 11080, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:11080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -193,17 +208,32 @@ testMultithreadedPut () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1441; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 11081, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:11081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -250,18 +280,33 @@ testMultithreadedPoolPut () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1442; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 11081, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:11081/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -323,18 +368,33 @@ testExternalPut () struct timeval tv; unsigned int pos = 0; int done_flag = 0; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1443; multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 11082, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:11082/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); diff --git a/src/testcurl/test_quiesce.c b/src/testcurl/test_quiesce.c @@ -55,6 +55,7 @@ struct CBC size_t size; }; +static int port; static size_t copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx) @@ -126,7 +127,7 @@ ServeOneRequest(void *param) fd = (MHD_socket) (intptr_t) param; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, NULL, NULL, &ahc_echo, "GET", + 0, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_LISTEN_SOCKET, fd, MHD_OPTION_NOTIFY_COMPLETED, &request_completed, &done, MHD_OPTION_END); @@ -172,7 +173,8 @@ setupCURL (void *cbc) CURL *c; c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:11080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1); @@ -200,20 +202,33 @@ testGet (int type, int pool_count, int poll_flag) pthread_t thrd; const char *thrdRet; + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1480; + cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; if (pool_count > 0) { d = MHD_start_daemon (type | MHD_USE_ERROR_LOG | MHD_USE_ITC | poll_flag, - 11080, NULL, NULL, &ahc_echo, "GET", + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_THREAD_POOL_SIZE, pool_count, MHD_OPTION_END); } else { d = MHD_start_daemon (type | MHD_USE_ERROR_LOG | MHD_USE_ITC | poll_flag, - 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); } if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = setupCURL(&cbc); @@ -342,17 +357,30 @@ testExternalGet () int i; MHD_socket fd; + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1481; + multi = NULL; cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 11080, + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 256; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = setupCURL(&cbc); multi = curl_multi_init (); diff --git a/src/testcurl/test_quiesce_stream.c b/src/testcurl/test_quiesce_stream.c @@ -22,6 +22,7 @@ * @brief Testcase for libmicrohttpd quiescing * @author Markus Doppelbauer * @author Christian Grothoff + * @author Karlson2k (Evgeny Grin) */ #include "mhd_options.h" #include <stdlib.h> @@ -166,8 +167,16 @@ http_AccessHandlerCallback (void *cls, int -main() +main(void) { + int port; + char command_line[1024]; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1470; + /* Panic callback */ MHD_set_panic_func (&http_PanicCallback, NULL); @@ -181,7 +190,7 @@ main() /* Create daemon */ struct MHD_Daemon *daemon = MHD_start_daemon (daemon_flags, - 8000, + port, NULL, NULL, &http_AccessHandlerCallback, @@ -189,7 +198,17 @@ main() MHD_OPTION_END); if (NULL == daemon) return 1; - if (0 != system ("curl -s http://127.0.0.1:8000")) + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (daemon, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (daemon); return 32; } + port = (int)dinfo->port; + } + sprintf(command_line, "curl -s http://127.0.0.1:%d", port); + + if (0 != system (command_line)) { MHD_stop_daemon (daemon); return 1; diff --git a/src/testcurl/test_start_stop.c b/src/testcurl/test_start_stop.c @@ -55,7 +55,7 @@ testInternalGet (int poll_flag) struct MHD_Daemon *d; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + 0, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; MHD_stop_daemon (d); @@ -68,7 +68,7 @@ testMultithreadedGet (int poll_flag) struct MHD_Daemon *d; d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 1081, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + 0, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 2; MHD_stop_daemon (d); @@ -81,7 +81,7 @@ testMultithreadedPoolGet (int poll_flag) struct MHD_Daemon *d; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 1081, NULL, NULL, &ahc_echo, "GET", + 0, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_THREAD_POOL_SIZE, CPU_COUNT, MHD_OPTION_END); if (d == NULL) return 4; @@ -95,7 +95,7 @@ testExternalGet () struct MHD_Daemon *d; d = MHD_start_daemon (MHD_USE_ERROR_LOG, - 1082, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + 0, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 8; MHD_stop_daemon (d); diff --git a/src/testcurl/test_termination.c b/src/testcurl/test_termination.c @@ -23,7 +23,6 @@ * @brief Testcase for libmicrohttpd tolerating client not closing immediately * @author hollosig */ -#define PORT 12345 #include "platform.h" #include <stdio.h> @@ -90,9 +89,16 @@ int main () { struct MHD_Daemon *daemon; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + port = 1490; + daemon = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - PORT, + port, NULL, NULL, connection_handler, NULL, MHD_OPTION_END); @@ -101,11 +107,19 @@ main () fprintf (stderr, "Daemon cannot be started!"); exit (1); } + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (daemon, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (daemon); return 32; } + port = (int)dinfo->port; + } CURL *curl = curl_easy_init (); //curl_easy_setopt(curl, CURLOPT_POST, 1L); char url[255]; - sprintf (url, "http://127.0.0.1:%d", PORT); + sprintf (url, "http://127.0.0.1:%d", port); curl_easy_setopt (curl, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, write_data); diff --git a/src/testcurl/test_timeout.c b/src/testcurl/test_timeout.c @@ -168,20 +168,39 @@ testWithoutTimeout () unsigned int pos = 0; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1500; + if (oneone) + port += 5; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1080, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_CONNECTION_TIMEOUT, 2, MHD_OPTION_NOTIFY_COMPLETED, &termination_cb, &withTimeout, MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer); @@ -223,20 +242,39 @@ testWithTimeout () struct CBC cbc; int done_flag = 0; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1501; + if (oneone) + port += 5; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, - 1080, + port, NULL, NULL, &ahc_echo, &done_flag, MHD_OPTION_CONNECTION_TIMEOUT, 2, MHD_OPTION_NOTIFY_COMPLETED, &termination_cb, &withoutTimeout, MHD_OPTION_END); if (d == NULL) return 16; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:1080/hello_world"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_READFUNCTION, &putBuffer_fail); diff --git a/src/testcurl/test_urlparse.c b/src/testcurl/test_urlparse.c @@ -130,16 +130,35 @@ testInternalGet (int poll_flag) char buf[2048]; struct CBC cbc; CURLcode errornum; + int port; + + if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT)) + port = 0; + else + { + port = 1510; + if (oneone) + port += 5; + } cbc.buf = buf; cbc.size = 2048; cbc.pos = 0; d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | poll_flag, - 11080, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); + port, NULL, NULL, &ahc_echo, "GET", MHD_OPTION_END); if (d == NULL) return 1; + if (0 == port) + { + const union MHD_DaemonInfo *dinfo; + dinfo = MHD_get_daemon_info (d, MHD_DAEMON_INFO_BIND_PORT); + if (NULL == dinfo || 0 == dinfo->port) + { MHD_stop_daemon (d); return 32; } + port = (int)dinfo->port; + } c = curl_easy_init (); - curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1:11080/hello_world?a=b&c=&d"); + curl_easy_setopt (c, CURLOPT_URL, "http://127.0.0.1/hello_world?a=b&c=&d"); + curl_easy_setopt (c, CURLOPT_PORT, (long)port); curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer); curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc); curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);