mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-29 04:09:31 +03:00
applying uncrustify to ensure uniform indentation
This commit is contained in:
228 files changed
+26097
-24636
No files matched your search
@@ -49,11 +49,11 @@ ahc_echo (void *cls,
|
||||
{
|
||||
struct MHD_Response *response;
|
||||
int ret;
|
||||
(void)cls;(void)url;(void)method;(void)version; /* Unused. Silent compiler warning. */
|
||||
(void)upload_data;(void)upload_data_size;(void)unused; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data; (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
|
||||
|
||||
response = MHD_create_response_from_buffer (0, NULL,
|
||||
MHD_RESPMEM_PERSISTENT);
|
||||
MHD_RESPMEM_PERSISTENT);
|
||||
ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
|
||||
MHD_destroy_response (response);
|
||||
return ret;
|
||||
@@ -88,31 +88,34 @@ testInternalSelectGet ()
|
||||
cbc.buf = buf;
|
||||
cbc.size = 2048;
|
||||
cbc.pos = 0;
|
||||
d = MHD_start_daemon (MHD_USE_ERROR_LOG | MHD_USE_TLS | MHD_USE_INTERNAL_POLLING_THREAD,
|
||||
d = MHD_start_daemon (MHD_USE_ERROR_LOG | MHD_USE_TLS
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD,
|
||||
port, NULL, NULL, &ahc_echo, "GET",
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_END);
|
||||
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) )
|
||||
{
|
||||
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;
|
||||
MHD_stop_daemon (d); return 32;
|
||||
}
|
||||
port = (int) dinfo->port;
|
||||
}
|
||||
char *aes256_sha = "AES256-SHA";
|
||||
if (curl_uses_nss_ssl() == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
if (curl_uses_nss_ssl () == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
|
||||
c = curl_easy_init ();
|
||||
curl_easy_setopt (c, CURLOPT_URL, "https://127.0.0.1/hello_world");
|
||||
curl_easy_setopt (c, CURLOPT_PORT, (long)port);
|
||||
curl_easy_setopt (c, CURLOPT_PORT, (long) port);
|
||||
curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer);
|
||||
curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
|
||||
/* TLS options */
|
||||
@@ -135,80 +138,83 @@ testInternalSelectGet ()
|
||||
|
||||
multi = curl_multi_init ();
|
||||
if (multi == NULL)
|
||||
{
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 512;
|
||||
}
|
||||
{
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 512;
|
||||
}
|
||||
mret = curl_multi_add_handle (multi, c);
|
||||
if (mret != CURLM_OK)
|
||||
{
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 1024;
|
||||
}
|
||||
start = time (NULL);
|
||||
while ((time (NULL) - start < 5) && (multi != NULL))
|
||||
{
|
||||
maxposixs = -1;
|
||||
FD_ZERO (&rs);
|
||||
FD_ZERO (&ws);
|
||||
FD_ZERO (&es);
|
||||
mret = curl_multi_fdset (multi, &rs, &ws, &es, &maxposixs);
|
||||
if (mret != CURLM_OK)
|
||||
{
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 1024;
|
||||
return 2048;
|
||||
}
|
||||
start = time (NULL);
|
||||
while ((time (NULL) - start < 5) && (multi != NULL))
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 1000;
|
||||
if (-1 != maxposixs)
|
||||
{
|
||||
maxposixs = -1;
|
||||
FD_ZERO (&rs);
|
||||
FD_ZERO (&ws);
|
||||
FD_ZERO (&es);
|
||||
mret = curl_multi_fdset (multi, &rs, &ws, &es, &maxposixs);
|
||||
if (mret != CURLM_OK)
|
||||
{
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 2048;
|
||||
}
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 1000;
|
||||
if (-1 != maxposixs)
|
||||
{
|
||||
if (-1 == select (maxposixs + 1, &rs, &ws, &es, &tv))
|
||||
{
|
||||
if (-1 == select (maxposixs + 1, &rs, &ws, &es, &tv))
|
||||
{
|
||||
#ifdef MHD_POSIX_SOCKETS
|
||||
if (EINTR != errno)
|
||||
abort ();
|
||||
if (EINTR != errno)
|
||||
abort ();
|
||||
#else
|
||||
if (WSAEINVAL != WSAGetLastError() || 0 != rs.fd_count || 0 != ws.fd_count || 0 != es.fd_count)
|
||||
abort ();
|
||||
Sleep (1000);
|
||||
if ((WSAEINVAL != WSAGetLastError ()) ||(0 != rs.fd_count) ||(0 !=
|
||||
ws.
|
||||
fd_count)
|
||||
||(0 != es.fd_count) )
|
||||
abort ();
|
||||
Sleep (1000);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
(void)sleep (1);
|
||||
curl_multi_perform (multi, &running);
|
||||
if (running == 0)
|
||||
{
|
||||
msg = curl_multi_info_read (multi, &running);
|
||||
if (msg == NULL)
|
||||
break;
|
||||
if (msg->msg == CURLMSG_DONE)
|
||||
{
|
||||
if (msg->data.result != CURLE_OK)
|
||||
printf ("%s failed at %s:%d: `%s'\n",
|
||||
"curl_multi_perform",
|
||||
__FILE__,
|
||||
__LINE__, curl_easy_strerror (msg->data.result));
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
c = NULL;
|
||||
multi = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (multi != NULL)
|
||||
else
|
||||
(void) sleep (1);
|
||||
curl_multi_perform (multi, &running);
|
||||
if (running == 0)
|
||||
{
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_easy_cleanup (c);
|
||||
curl_multi_cleanup (multi);
|
||||
msg = curl_multi_info_read (multi, &running);
|
||||
if (msg == NULL)
|
||||
break;
|
||||
if (msg->msg == CURLMSG_DONE)
|
||||
{
|
||||
if (msg->data.result != CURLE_OK)
|
||||
printf ("%s failed at %s:%d: `%s'\n",
|
||||
"curl_multi_perform",
|
||||
__FILE__,
|
||||
__LINE__, curl_easy_strerror (msg->data.result));
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
c = NULL;
|
||||
multi = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (multi != NULL)
|
||||
{
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_easy_cleanup (c);
|
||||
curl_multi_cleanup (multi);
|
||||
}
|
||||
MHD_stop_daemon (d);
|
||||
if (cbc.pos != 0)
|
||||
return 8192;
|
||||
@@ -220,16 +226,16 @@ int
|
||||
main (int argc, char *const *argv)
|
||||
{
|
||||
unsigned int errorCount = 0;
|
||||
(void)argc; /* Unused. Silent compiler warning. */
|
||||
(void) argc; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
if (NULL == curl_version_info (CURLVERSION_NOW)->ssl_version)
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
if (0 != (errorCount = testInternalSelectGet ()))
|
||||
fprintf (stderr, "Failed test: %s, error: %u.\n", argv[0], errorCount);
|
||||
curl_global_cleanup ();
|
||||
|
||||
@@ -39,9 +39,9 @@ extern const char srv_signed_key_pem[];
|
||||
|
||||
/* perform a HTTP GET request via SSL/TLS */
|
||||
static int
|
||||
test_secure_get (FILE * test_fd,
|
||||
const char *cipher_suite,
|
||||
int proto_version)
|
||||
test_secure_get (FILE *test_fd,
|
||||
const char *cipher_suite,
|
||||
int proto_version)
|
||||
{
|
||||
int ret;
|
||||
struct MHD_Daemon *d;
|
||||
@@ -52,26 +52,29 @@ test_secure_get (FILE * test_fd,
|
||||
else
|
||||
port = 3041;
|
||||
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS |
|
||||
MHD_USE_ERROR_LOG, port,
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG, port,
|
||||
NULL, NULL, &http_ahc, NULL,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_signed_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_signed_cert_pem,
|
||||
MHD_OPTION_END);
|
||||
|
||||
if (d == NULL)
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
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) )
|
||||
{
|
||||
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 -1; }
|
||||
port = (int)dinfo->port;
|
||||
MHD_stop_daemon (d); return -1;
|
||||
}
|
||||
port = (int) dinfo->port;
|
||||
}
|
||||
|
||||
ret = test_https_transfer (test_fd, port, cipher_suite, proto_version);
|
||||
|
||||
@@ -85,7 +88,7 @@ main (int argc, char *const *argv)
|
||||
{
|
||||
unsigned int errorCount = 0;
|
||||
const char *aes256_sha_tlsv1 = "AES256-SHA";
|
||||
(void)argc; /* Unused. Silent compiler warning. */
|
||||
(void) argc; /* Unused. Silent compiler warning. */
|
||||
|
||||
#ifdef MHD_HTTPS_REQUIRE_GRYPT
|
||||
gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
|
||||
@@ -93,19 +96,19 @@ main (int argc, char *const *argv)
|
||||
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
#endif
|
||||
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
if (NULL == curl_version_info (CURLVERSION_NOW)->ssl_version)
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
|
||||
if (curl_uses_nss_ssl() == 0)
|
||||
{
|
||||
aes256_sha_tlsv1 = "rsa_aes_256_sha";
|
||||
}
|
||||
if (curl_uses_nss_ssl () == 0)
|
||||
{
|
||||
aes256_sha_tlsv1 = "rsa_aes_256_sha";
|
||||
}
|
||||
|
||||
errorCount +=
|
||||
test_secure_get (NULL, aes256_sha_tlsv1, CURL_SSLVERSION_TLSv1);
|
||||
|
||||
@@ -36,10 +36,10 @@
|
||||
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
|
||||
#include "tls_test_common.h"
|
||||
|
||||
#if defined(CPU_COUNT) && (CPU_COUNT+0) < 4
|
||||
#if defined(CPU_COUNT) && (CPU_COUNT + 0) < 4
|
||||
#undef CPU_COUNT
|
||||
#endif
|
||||
#if !defined(CPU_COUNT)
|
||||
#if ! defined(CPU_COUNT)
|
||||
#define CPU_COUNT 4
|
||||
#endif
|
||||
|
||||
@@ -83,8 +83,8 @@ test_single_client (void *cls, int port, const char *cipher_suite,
|
||||
{
|
||||
void *client_thread_ret;
|
||||
struct https_test_data client_args =
|
||||
{ NULL, port, cipher_suite, curl_proto_version };
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
{ NULL, port, cipher_suite, curl_proto_version };
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
|
||||
client_thread_ret = https_transfer_thread_adapter (&client_args);
|
||||
if (client_thread_ret != NULL)
|
||||
@@ -101,7 +101,7 @@ test_single_client (void *cls, int port, const char *cipher_suite,
|
||||
* TODO : make client_count a parameter - numver of curl client threads to spawn
|
||||
*/
|
||||
static int
|
||||
test_parallel_clients (void * cls, int port, const char *cipher_suite,
|
||||
test_parallel_clients (void *cls, int port, const char *cipher_suite,
|
||||
int curl_proto_version)
|
||||
{
|
||||
int i;
|
||||
@@ -109,26 +109,26 @@ test_parallel_clients (void * cls, int port, const char *cipher_suite,
|
||||
void *client_thread_ret;
|
||||
pthread_t client_arr[client_count];
|
||||
struct https_test_data client_args =
|
||||
{ NULL, port, cipher_suite, curl_proto_version };
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
{ NULL, port, cipher_suite, curl_proto_version };
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
|
||||
for (i = 0; i < client_count; ++i)
|
||||
{
|
||||
if (pthread_create (&client_arr[i], NULL,
|
||||
&https_transfer_thread_adapter, &client_args) != 0)
|
||||
{
|
||||
if (pthread_create (&client_arr[i], NULL,
|
||||
&https_transfer_thread_adapter, &client_args) != 0)
|
||||
{
|
||||
fprintf (stderr, "Error: failed to spawn test client threads.\n");
|
||||
return -1;
|
||||
}
|
||||
fprintf (stderr, "Error: failed to spawn test client threads.\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* check all client requests fulfilled correctly */
|
||||
for (i = 0; i < client_count; ++i)
|
||||
{
|
||||
if ((pthread_join (client_arr[i], &client_thread_ret) != 0) ||
|
||||
(client_thread_ret != NULL))
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
if ((pthread_join (client_arr[i], &client_thread_ret) != 0) ||
|
||||
(client_thread_ret != NULL))
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -136,11 +136,11 @@ test_parallel_clients (void * cls, int port, const char *cipher_suite,
|
||||
|
||||
int
|
||||
main (int argc, char *const *argv)
|
||||
{
|
||||
{
|
||||
unsigned int errorCount = 0;
|
||||
const char *aes256_sha = "AES256-SHA";
|
||||
int port;
|
||||
(void)argc; /* Unused. Silent compiler warning. */
|
||||
(void) argc; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT))
|
||||
port = 0;
|
||||
@@ -150,21 +150,23 @@ main (int argc, char *const *argv)
|
||||
/* initialize random seed used by curl clients */
|
||||
unsigned int iseed = (unsigned int) time (NULL);
|
||||
srand (iseed);
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
|
||||
if (NULL == curl_version_info (CURLVERSION_NOW)->ssl_version)
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
return 77;
|
||||
}
|
||||
if (curl_uses_nss_ssl() == 0)
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
return 77;
|
||||
}
|
||||
if (curl_uses_nss_ssl () == 0)
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
#ifdef EPOLL_SUPPORT
|
||||
errorCount +=
|
||||
test_wrap ("single threaded daemon, single client, epoll", &test_single_client,
|
||||
test_wrap ("single threaded daemon, single client, epoll",
|
||||
&test_single_client,
|
||||
NULL, port,
|
||||
MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS | MHD_USE_ERROR_LOG | MHD_USE_EPOLL,
|
||||
MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG | MHD_USE_EPOLL,
|
||||
aes256_sha, CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
|
||||
srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
|
||||
srv_self_signed_cert_pem, MHD_OPTION_END);
|
||||
@@ -172,7 +174,8 @@ main (int argc, char *const *argv)
|
||||
errorCount +=
|
||||
test_wrap ("single threaded daemon, single client", &test_single_client,
|
||||
NULL, port,
|
||||
MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS | MHD_USE_ERROR_LOG,
|
||||
MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG,
|
||||
aes256_sha, CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
|
||||
srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
|
||||
srv_self_signed_cert_pem, MHD_OPTION_END);
|
||||
@@ -180,7 +183,8 @@ main (int argc, char *const *argv)
|
||||
errorCount +=
|
||||
test_wrap ("single threaded daemon, parallel clients, epoll",
|
||||
&test_parallel_clients, NULL, port,
|
||||
MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS | MHD_USE_ERROR_LOG | MHD_USE_EPOLL,
|
||||
MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG | MHD_USE_EPOLL,
|
||||
aes256_sha, CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
|
||||
srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
|
||||
srv_self_signed_cert_pem, MHD_OPTION_END);
|
||||
@@ -188,7 +192,8 @@ main (int argc, char *const *argv)
|
||||
errorCount +=
|
||||
test_wrap ("single threaded daemon, parallel clients",
|
||||
&test_parallel_clients, NULL, port,
|
||||
MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS | MHD_USE_ERROR_LOG,
|
||||
MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG,
|
||||
aes256_sha, CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
|
||||
srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
|
||||
srv_self_signed_cert_pem, MHD_OPTION_END);
|
||||
|
||||
@@ -38,10 +38,10 @@
|
||||
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
|
||||
#include "tls_test_common.h"
|
||||
|
||||
#if defined(CPU_COUNT) && (CPU_COUNT+0) < 4
|
||||
#if defined(CPU_COUNT) && (CPU_COUNT + 0) < 4
|
||||
#undef CPU_COUNT
|
||||
#endif
|
||||
#if !defined(CPU_COUNT)
|
||||
#if ! defined(CPU_COUNT)
|
||||
#define CPU_COUNT 4
|
||||
#endif
|
||||
|
||||
@@ -83,8 +83,8 @@ test_single_client (void *cls, int port, const char *cipher_suite,
|
||||
{
|
||||
void *client_thread_ret;
|
||||
struct https_test_data client_args =
|
||||
{ NULL, port, cipher_suite, curl_proto_version };
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
{ NULL, port, cipher_suite, curl_proto_version };
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
|
||||
client_thread_ret = https_transfer_thread_adapter (&client_args);
|
||||
if (client_thread_ret != NULL)
|
||||
@@ -109,27 +109,27 @@ test_parallel_clients (void *cls, int port, const char *cipher_suite,
|
||||
void *client_thread_ret;
|
||||
pthread_t client_arr[client_count];
|
||||
struct https_test_data client_args =
|
||||
{ NULL, port, cipher_suite, curl_proto_version };
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
{ NULL, port, cipher_suite, curl_proto_version };
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
|
||||
for (i = 0; i < client_count; ++i)
|
||||
{
|
||||
if (pthread_create (&client_arr[i], NULL,
|
||||
&https_transfer_thread_adapter, &client_args) != 0)
|
||||
{
|
||||
if (pthread_create (&client_arr[i], NULL,
|
||||
&https_transfer_thread_adapter, &client_args) != 0)
|
||||
{
|
||||
fprintf (stderr, "Error: failed to spawn test client threads.\n");
|
||||
fprintf (stderr, "Error: failed to spawn test client threads.\n");
|
||||
|
||||
return -1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* check all client requests fulfilled correctly */
|
||||
for (i = 0; i < client_count; ++i)
|
||||
{
|
||||
if ((pthread_join (client_arr[i], &client_thread_ret) != 0) ||
|
||||
(client_thread_ret != NULL))
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
if ((pthread_join (client_arr[i], &client_thread_ret) != 0) ||
|
||||
(client_thread_ret != NULL))
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -141,7 +141,7 @@ main (int argc, char *const *argv)
|
||||
unsigned int errorCount = 0;
|
||||
const char *ssl_version;
|
||||
int port;
|
||||
(void)argc; /* Unused. Silent compiler warning. */
|
||||
(void) argc; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT))
|
||||
port = 0;
|
||||
@@ -157,32 +157,33 @@ main (int argc, char *const *argv)
|
||||
#endif
|
||||
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
|
||||
srand (iseed);
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
ssl_version = curl_version_info (CURLVERSION_NOW)->ssl_version;
|
||||
if (NULL == ssl_version)
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
if (0 != strncmp (ssl_version, "GnuTLS", 6))
|
||||
{
|
||||
fprintf (stderr, "This test can be run only with libcurl-gnutls.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "This test can be run only with libcurl-gnutls.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
|
||||
char *aes256_sha = "AES256-SHA";
|
||||
if (curl_uses_nss_ssl() == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
if (curl_uses_nss_ssl () == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
|
||||
errorCount +=
|
||||
test_wrap ("multi threaded daemon, single client", &test_single_client,
|
||||
NULL, port,
|
||||
MHD_USE_TLS | MHD_USE_ERROR_LOG | MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD,
|
||||
MHD_USE_TLS | MHD_USE_ERROR_LOG | MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD,
|
||||
aes256_sha, CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
|
||||
srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
|
||||
srv_self_signed_cert_pem, MHD_OPTION_END);
|
||||
@@ -190,7 +191,8 @@ main (int argc, char *const *argv)
|
||||
errorCount +=
|
||||
test_wrap ("multi threaded daemon, parallel client",
|
||||
&test_parallel_clients, NULL, port,
|
||||
MHD_USE_TLS | MHD_USE_ERROR_LOG | MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD,
|
||||
MHD_USE_TLS | MHD_USE_ERROR_LOG | MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD,
|
||||
aes256_sha, CURL_SSLVERSION_TLSv1, MHD_OPTION_HTTPS_MEM_KEY,
|
||||
srv_key_pem, MHD_OPTION_HTTPS_MEM_CERT,
|
||||
srv_self_signed_cert_pem, MHD_OPTION_END);
|
||||
|
||||
@@ -52,19 +52,19 @@ ahc_echo (void *cls,
|
||||
const char *me = cls;
|
||||
struct MHD_Response *response;
|
||||
int ret;
|
||||
(void)version;(void)upload_data;(void)upload_data_size; /* Unused. Silent compiler warning. */
|
||||
(void) version; (void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (0 != strcmp (me, method))
|
||||
return MHD_NO; /* unexpected method */
|
||||
if (&ptr != *unused)
|
||||
{
|
||||
*unused = &ptr;
|
||||
return MHD_YES;
|
||||
}
|
||||
{
|
||||
*unused = &ptr;
|
||||
return MHD_YES;
|
||||
}
|
||||
*unused = NULL;
|
||||
response = MHD_create_response_from_buffer (strlen (url),
|
||||
(void *) url,
|
||||
MHD_RESPMEM_MUST_COPY);
|
||||
(void *) url,
|
||||
MHD_RESPMEM_MUST_COPY);
|
||||
ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
|
||||
MHD_destroy_response (response);
|
||||
if (ret == MHD_NO)
|
||||
@@ -111,24 +111,26 @@ testExternalGet (int flags)
|
||||
port, NULL, NULL, &ahc_echo, "GET",
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_END);
|
||||
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) )
|
||||
{
|
||||
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;
|
||||
MHD_stop_daemon (d); return 32;
|
||||
}
|
||||
port = (int) dinfo->port;
|
||||
}
|
||||
|
||||
if (curl_uses_nss_ssl() == 0)
|
||||
if (curl_uses_nss_ssl () == 0)
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
|
||||
c = curl_easy_init ();
|
||||
curl_easy_setopt (c, CURLOPT_URL, "https://127.0.0.1/hello_world");
|
||||
curl_easy_setopt (c, CURLOPT_PORT, (long)port);
|
||||
curl_easy_setopt (c, CURLOPT_PORT, (long) port);
|
||||
curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer);
|
||||
curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
|
||||
/* TLS options */
|
||||
@@ -151,90 +153,93 @@ testExternalGet (int flags)
|
||||
|
||||
multi = curl_multi_init ();
|
||||
if (multi == NULL)
|
||||
{
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 512;
|
||||
}
|
||||
{
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 512;
|
||||
}
|
||||
mret = curl_multi_add_handle (multi, c);
|
||||
if (mret != CURLM_OK)
|
||||
{
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 1024;
|
||||
}
|
||||
start = time (NULL);
|
||||
while ((time (NULL) - start < 5) && (multi != NULL))
|
||||
{
|
||||
maxsock = MHD_INVALID_SOCKET;
|
||||
maxposixs = -1;
|
||||
FD_ZERO (&rs);
|
||||
FD_ZERO (&ws);
|
||||
FD_ZERO (&es);
|
||||
mret = curl_multi_fdset (multi, &rs, &ws, &es, &maxposixs);
|
||||
if (mret != CURLM_OK)
|
||||
{
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 1024;
|
||||
return 2048;
|
||||
}
|
||||
start = time (NULL);
|
||||
while ((time (NULL) - start < 5) && (multi != NULL))
|
||||
{
|
||||
maxsock = MHD_INVALID_SOCKET;
|
||||
maxposixs = -1;
|
||||
FD_ZERO (&rs);
|
||||
FD_ZERO (&ws);
|
||||
FD_ZERO (&es);
|
||||
mret = curl_multi_fdset (multi, &rs, &ws, &es, &maxposixs);
|
||||
if (mret != CURLM_OK)
|
||||
{
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 2048;
|
||||
}
|
||||
if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &maxsock))
|
||||
{
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 4096;
|
||||
}
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 1000;
|
||||
if (-1 != maxposixs)
|
||||
{
|
||||
if (-1 == select (maxposixs + 1, &rs, &ws, &es, &tv))
|
||||
{
|
||||
#ifdef MHD_POSIX_SOCKETS
|
||||
if (EINTR != errno)
|
||||
abort ();
|
||||
#else
|
||||
if (WSAEINVAL != WSAGetLastError() || 0 != rs.fd_count || 0 != ws.fd_count || 0 != es.fd_count)
|
||||
abort ();
|
||||
Sleep (1000);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
(void)sleep (1);
|
||||
curl_multi_perform (multi, &running);
|
||||
if (running == 0)
|
||||
{
|
||||
msg = curl_multi_info_read (multi, &running);
|
||||
if (msg == NULL)
|
||||
break;
|
||||
if (msg->msg == CURLMSG_DONE)
|
||||
{
|
||||
if (msg->data.result != CURLE_OK)
|
||||
printf ("%s failed at %s:%d: `%s'\n",
|
||||
"curl_multi_perform",
|
||||
__FILE__,
|
||||
__LINE__, curl_easy_strerror (msg->data.result));
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
c = NULL;
|
||||
multi = NULL;
|
||||
}
|
||||
}
|
||||
MHD_run (d);
|
||||
}
|
||||
if (multi != NULL)
|
||||
if (MHD_YES != MHD_get_fdset (d, &rs, &ws, &es, &maxsock))
|
||||
{
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_easy_cleanup (c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
return 4096;
|
||||
}
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 1000;
|
||||
if (-1 != maxposixs)
|
||||
{
|
||||
if (-1 == select (maxposixs + 1, &rs, &ws, &es, &tv))
|
||||
{
|
||||
#ifdef MHD_POSIX_SOCKETS
|
||||
if (EINTR != errno)
|
||||
abort ();
|
||||
#else
|
||||
if ((WSAEINVAL != WSAGetLastError ()) ||(0 != rs.fd_count) ||(0 !=
|
||||
ws.
|
||||
fd_count)
|
||||
||(0 != es.fd_count) )
|
||||
abort ();
|
||||
Sleep (1000);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else
|
||||
(void) sleep (1);
|
||||
curl_multi_perform (multi, &running);
|
||||
if (running == 0)
|
||||
{
|
||||
msg = curl_multi_info_read (multi, &running);
|
||||
if (msg == NULL)
|
||||
break;
|
||||
if (msg->msg == CURLMSG_DONE)
|
||||
{
|
||||
if (msg->data.result != CURLE_OK)
|
||||
printf ("%s failed at %s:%d: `%s'\n",
|
||||
"curl_multi_perform",
|
||||
__FILE__,
|
||||
__LINE__, curl_easy_strerror (msg->data.result));
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_multi_cleanup (multi);
|
||||
curl_easy_cleanup (c);
|
||||
c = NULL;
|
||||
multi = NULL;
|
||||
}
|
||||
}
|
||||
MHD_run (d);
|
||||
}
|
||||
if (multi != NULL)
|
||||
{
|
||||
curl_multi_remove_handle (multi, c);
|
||||
curl_easy_cleanup (c);
|
||||
curl_multi_cleanup (multi);
|
||||
}
|
||||
MHD_stop_daemon (d);
|
||||
if (cbc.pos != strlen ("/hello_world"))
|
||||
return 8192;
|
||||
@@ -248,17 +253,17 @@ int
|
||||
main (int argc, char *const *argv)
|
||||
{
|
||||
unsigned int errorCount = 0;
|
||||
(void)argc; /* Unused. Silent compiler warning. */
|
||||
(void) argc; /* Unused. Silent compiler warning. */
|
||||
|
||||
oneone = 0;
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
if (NULL == curl_version_info (CURLVERSION_NOW)->ssl_version)
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
|
||||
#ifdef EPOLL_SUPPORT
|
||||
errorCount += testExternalGet (MHD_USE_EPOLL);
|
||||
|
||||
@@ -43,70 +43,74 @@ extern const char srv_self_signed_cert_pem[];
|
||||
*/
|
||||
static int
|
||||
test_concurent_daemon_pair (void *cls,
|
||||
const char *cipher_suite,
|
||||
const char *cipher_suite,
|
||||
int proto_version)
|
||||
{
|
||||
int ret;
|
||||
struct MHD_Daemon *d1;
|
||||
struct MHD_Daemon *d2;
|
||||
int port1, port2;
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
|
||||
|
||||
if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT))
|
||||
port1 = port2 = 0;
|
||||
else
|
||||
{
|
||||
port1 = 3050;
|
||||
port2 = 3051;
|
||||
}
|
||||
{
|
||||
port1 = 3050;
|
||||
port2 = 3051;
|
||||
}
|
||||
|
||||
d1 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS |
|
||||
MHD_USE_ERROR_LOG, port1,
|
||||
d1 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG, port1,
|
||||
NULL, NULL, &http_ahc, NULL,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_END);
|
||||
|
||||
if (d1 == NULL)
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
return -1;
|
||||
}
|
||||
if (0 == port1)
|
||||
{
|
||||
const union MHD_DaemonInfo *dinfo;
|
||||
dinfo = MHD_get_daemon_info (d1, MHD_DAEMON_INFO_BIND_PORT);
|
||||
if ((NULL == dinfo) ||(0 == dinfo->port) )
|
||||
{
|
||||
const union MHD_DaemonInfo *dinfo;
|
||||
dinfo = MHD_get_daemon_info (d1, MHD_DAEMON_INFO_BIND_PORT);
|
||||
if (NULL == dinfo || 0 == dinfo->port)
|
||||
{ MHD_stop_daemon (d1); return -1; }
|
||||
port1 = (int)dinfo->port;
|
||||
MHD_stop_daemon (d1); return -1;
|
||||
}
|
||||
port1 = (int) dinfo->port;
|
||||
}
|
||||
|
||||
d2 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS |
|
||||
MHD_USE_ERROR_LOG, port2,
|
||||
d2 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG, port2,
|
||||
NULL, NULL, &http_ahc, NULL,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_END);
|
||||
|
||||
if (d2 == NULL)
|
||||
{
|
||||
MHD_stop_daemon (d1);
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
return -1;
|
||||
}
|
||||
if (0 == port2)
|
||||
{
|
||||
const union MHD_DaemonInfo *dinfo;
|
||||
dinfo = MHD_get_daemon_info (d2, MHD_DAEMON_INFO_BIND_PORT);
|
||||
if ((NULL == dinfo) ||(0 == dinfo->port) )
|
||||
{
|
||||
MHD_stop_daemon (d1);
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
MHD_stop_daemon (d2);
|
||||
return -1;
|
||||
}
|
||||
if (0 == port2)
|
||||
{
|
||||
const union MHD_DaemonInfo *dinfo;
|
||||
dinfo = MHD_get_daemon_info (d2, MHD_DAEMON_INFO_BIND_PORT);
|
||||
if (NULL == dinfo || 0 == dinfo->port)
|
||||
{
|
||||
MHD_stop_daemon (d1);
|
||||
MHD_stop_daemon (d2);
|
||||
return -1;
|
||||
}
|
||||
port2 = (int)dinfo->port;
|
||||
}
|
||||
port2 = (int) dinfo->port;
|
||||
}
|
||||
|
||||
ret =
|
||||
test_daemon_get (NULL, cipher_suite, proto_version, port1, 0);
|
||||
@@ -128,7 +132,7 @@ main (int argc, char *const *argv)
|
||||
unsigned int errorCount = 0;
|
||||
FILE *cert;
|
||||
const char *aes256_sha = "AES256-SHA";
|
||||
(void)argc; (void)argv; /* Unused. Silent compiler warning. */
|
||||
(void) argc; (void) argv; /* Unused. Silent compiler warning. */
|
||||
|
||||
#ifdef MHD_HTTPS_REQUIRE_GRYPT
|
||||
gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
|
||||
@@ -136,25 +140,25 @@ main (int argc, char *const *argv)
|
||||
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
#endif
|
||||
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
if (NULL == curl_version_info (CURLVERSION_NOW)->ssl_version)
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
if ((cert = setup_ca_cert ()) == NULL)
|
||||
{
|
||||
fprintf (stderr, MHD_E_TEST_FILE_CREAT);
|
||||
curl_global_cleanup ();
|
||||
return 99;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_TEST_FILE_CREAT);
|
||||
curl_global_cleanup ();
|
||||
return 99;
|
||||
}
|
||||
|
||||
if (curl_uses_nss_ssl() == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
if (curl_uses_nss_ssl () == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
|
||||
errorCount +=
|
||||
test_concurent_daemon_pair (NULL, aes256_sha, CURL_SSLVERSION_TLSv1);
|
||||
@@ -165,7 +169,7 @@ main (int argc, char *const *argv)
|
||||
fclose (cert);
|
||||
if (0 != remove (ca_cert_file_name))
|
||||
fprintf (stderr,
|
||||
"Failed to remove `%s'\n",
|
||||
ca_cert_file_name);
|
||||
"Failed to remove `%s'\n",
|
||||
ca_cert_file_name);
|
||||
return errorCount != 0 ? 1 : 0;
|
||||
}
|
||||
@@ -49,41 +49,41 @@ query_session_ahc (void *cls, struct MHD_Connection *connection,
|
||||
{
|
||||
struct MHD_Response *response;
|
||||
int ret;
|
||||
(void)cls;(void)url;(void)method;(void)version; /* Unused. Silent compiler warning. */
|
||||
(void)upload_data;(void)upload_data_size; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (NULL == *ptr)
|
||||
{
|
||||
*ptr = (void*)&query_session_ahc;
|
||||
return MHD_YES;
|
||||
}
|
||||
{
|
||||
*ptr = (void*) &query_session_ahc;
|
||||
return MHD_YES;
|
||||
}
|
||||
|
||||
if (GNUTLS_TLS1_1 !=
|
||||
(ret = MHD_get_connection_info
|
||||
(connection,
|
||||
MHD_CONNECTION_INFO_PROTOCOL)->protocol))
|
||||
(connection,
|
||||
MHD_CONNECTION_INFO_PROTOCOL)->protocol))
|
||||
{
|
||||
if (GNUTLS_TLS1_2 == ret)
|
||||
{
|
||||
if (GNUTLS_TLS1_2 == ret)
|
||||
{
|
||||
/* as usual, TLS implementations sometimes don't
|
||||
quite do what was asked, just mildly complain... */
|
||||
fprintf (stderr,
|
||||
"Warning: requested TLS 1.1, got TLS 1.2\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* really different version... */
|
||||
fprintf (stderr,
|
||||
"Error: requested protocol mismatch (wanted %d, got %d)\n",
|
||||
GNUTLS_TLS1_1,
|
||||
ret);
|
||||
return -1;
|
||||
}
|
||||
/* as usual, TLS implementations sometimes don't
|
||||
quite do what was asked, just mildly complain... */
|
||||
fprintf (stderr,
|
||||
"Warning: requested TLS 1.1, got TLS 1.2\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* really different version... */
|
||||
fprintf (stderr,
|
||||
"Error: requested protocol mismatch (wanted %d, got %d)\n",
|
||||
GNUTLS_TLS1_1,
|
||||
ret);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
response = MHD_create_response_from_buffer (strlen (EMPTY_PAGE),
|
||||
(void *) EMPTY_PAGE,
|
||||
MHD_RESPMEM_PERSISTENT);
|
||||
(void *) EMPTY_PAGE,
|
||||
MHD_RESPMEM_PERSISTENT);
|
||||
ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
|
||||
MHD_destroy_response (response);
|
||||
return ret;
|
||||
@@ -114,37 +114,38 @@ test_query_session ()
|
||||
cbc.pos = 0;
|
||||
|
||||
/* setup test */
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS |
|
||||
MHD_USE_ERROR_LOG, port,
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG, port,
|
||||
NULL, NULL, &query_session_ahc, NULL,
|
||||
MHD_OPTION_HTTPS_PRIORITIES, "NORMAL:+ARCFOUR-128",
|
||||
MHD_OPTION_HTTPS_PRIORITIES, "NORMAL:+ARCFOUR-128",
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_END);
|
||||
|
||||
if (d == NULL)
|
||||
{
|
||||
free (cbc.buf);
|
||||
return 2;
|
||||
}
|
||||
{
|
||||
free (cbc.buf);
|
||||
return 2;
|
||||
}
|
||||
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) )
|
||||
{
|
||||
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);
|
||||
free (cbc.buf);
|
||||
return 32;
|
||||
}
|
||||
port = (int)dinfo->port;
|
||||
MHD_stop_daemon (d);
|
||||
free (cbc.buf);
|
||||
return 32;
|
||||
}
|
||||
port = (int) dinfo->port;
|
||||
}
|
||||
|
||||
const char *aes256_sha = "AES256-SHA";
|
||||
if (curl_uses_nss_ssl() == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
if (curl_uses_nss_ssl () == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
|
||||
gen_test_file_url (url,
|
||||
sizeof (url),
|
||||
@@ -172,15 +173,15 @@ test_query_session ()
|
||||
* crashes on my system! */
|
||||
curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1L);
|
||||
if (CURLE_OK != (errornum = curl_easy_perform (c)))
|
||||
{
|
||||
fprintf (stderr, "curl_easy_perform failed: `%s'\n",
|
||||
curl_easy_strerror (errornum));
|
||||
{
|
||||
fprintf (stderr, "curl_easy_perform failed: `%s'\n",
|
||||
curl_easy_strerror (errornum));
|
||||
|
||||
MHD_stop_daemon (d);
|
||||
curl_easy_cleanup (c);
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
MHD_stop_daemon (d);
|
||||
curl_easy_cleanup (c);
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
curl_easy_cleanup (c);
|
||||
MHD_stop_daemon (d);
|
||||
@@ -195,7 +196,7 @@ main (int argc, char *const *argv)
|
||||
#if LIBCURL_VERSION_NUM >= 0x072200
|
||||
unsigned int errorCount = 0;
|
||||
const char *ssl_version;
|
||||
(void)argc; /* Unused. Silent compiler warning. */
|
||||
(void) argc; /* Unused. Silent compiler warning. */
|
||||
|
||||
#ifdef MHD_HTTPS_REQUIRE_GRYPT
|
||||
gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
|
||||
@@ -203,7 +204,7 @@ main (int argc, char *const *argv)
|
||||
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
#endif
|
||||
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
|
||||
ssl_version = curl_version_info (CURLVERSION_NOW)->ssl_version;
|
||||
|
||||
@@ -60,9 +60,9 @@ static struct Hosts *hosts;
|
||||
* (This code is largely taken from GnuTLS).
|
||||
*/
|
||||
static void
|
||||
load_keys(const char *hostname,
|
||||
const char *CERT_FILE,
|
||||
const char *KEY_FILE)
|
||||
load_keys (const char *hostname,
|
||||
const char *CERT_FILE,
|
||||
const char *KEY_FILE)
|
||||
{
|
||||
int ret;
|
||||
gnutls_datum_t data;
|
||||
@@ -77,32 +77,32 @@ load_keys(const char *hostname,
|
||||
|
||||
ret = gnutls_load_file (CERT_FILE, &data);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"*** Error loading certificate file %s.\n",
|
||||
CERT_FILE);
|
||||
exit (1);
|
||||
}
|
||||
{
|
||||
fprintf (stderr,
|
||||
"*** Error loading certificate file %s.\n",
|
||||
CERT_FILE);
|
||||
exit (1);
|
||||
}
|
||||
ret =
|
||||
gnutls_pcert_import_x509_raw (&host->pcrt, &data, GNUTLS_X509_FMT_PEM,
|
||||
0);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"*** Error loading certificate file: %s\n",
|
||||
gnutls_strerror (ret));
|
||||
exit (1);
|
||||
}
|
||||
{
|
||||
fprintf (stderr,
|
||||
"*** Error loading certificate file: %s\n",
|
||||
gnutls_strerror (ret));
|
||||
exit (1);
|
||||
}
|
||||
gnutls_free (data.data);
|
||||
|
||||
ret = gnutls_load_file (KEY_FILE, &data);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"*** Error loading key file %s.\n",
|
||||
KEY_FILE);
|
||||
exit (1);
|
||||
}
|
||||
{
|
||||
fprintf (stderr,
|
||||
"*** Error loading key file %s.\n",
|
||||
KEY_FILE);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
gnutls_privkey_init (&host->key);
|
||||
ret =
|
||||
@@ -110,12 +110,12 @@ load_keys(const char *hostname,
|
||||
&data, GNUTLS_X509_FMT_PEM,
|
||||
NULL, 0);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"*** Error loading key file: %s\n",
|
||||
gnutls_strerror (ret));
|
||||
exit (1);
|
||||
}
|
||||
{
|
||||
fprintf (stderr,
|
||||
"*** Error loading key file: %s\n",
|
||||
gnutls_strerror (ret));
|
||||
exit (1);
|
||||
}
|
||||
gnutls_free (data.data);
|
||||
}
|
||||
|
||||
@@ -133,19 +133,19 @@ load_keys(const char *hostname,
|
||||
*/
|
||||
static int
|
||||
sni_callback (gnutls_session_t session,
|
||||
const gnutls_datum_t* req_ca_dn,
|
||||
const gnutls_datum_t*req_ca_dn,
|
||||
int nreqs,
|
||||
const gnutls_pk_algorithm_t* pk_algos,
|
||||
const gnutls_pk_algorithm_t*pk_algos,
|
||||
int pk_algos_length,
|
||||
gnutls_pcert_st** pcert,
|
||||
gnutls_pcert_st**pcert,
|
||||
unsigned int *pcert_length,
|
||||
gnutls_privkey_t * pkey)
|
||||
gnutls_privkey_t *pkey)
|
||||
{
|
||||
char name[256];
|
||||
size_t name_len;
|
||||
struct Hosts *host;
|
||||
unsigned int type;
|
||||
(void)req_ca_dn;(void)nreqs;(void)pk_algos;(void)pk_algos_length; /* Unused. Silent compiler warning. */
|
||||
(void) req_ca_dn; (void) nreqs; (void) pk_algos; (void) pk_algos_length; /* Unused. Silent compiler warning. */
|
||||
|
||||
name_len = sizeof (name);
|
||||
if (GNUTLS_E_SUCCESS !=
|
||||
@@ -159,13 +159,13 @@ sni_callback (gnutls_session_t session,
|
||||
if (0 == strncmp (name, host->hostname, name_len))
|
||||
break;
|
||||
if (NULL == host)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Need certificate for %.*s\n",
|
||||
(int) name_len,
|
||||
name);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Need certificate for %.*s\n",
|
||||
(int) name_len,
|
||||
name);
|
||||
return -1;
|
||||
}
|
||||
#if 0
|
||||
fprintf (stderr,
|
||||
"Returning certificate for %.*s\n",
|
||||
@@ -192,10 +192,10 @@ do_get (const char *url, int port)
|
||||
|
||||
len = strlen (test_data);
|
||||
if (NULL == (cbc.buf = malloc (sizeof (char) * len)))
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
return -1;
|
||||
}
|
||||
cbc.size = len;
|
||||
cbc.pos = 0;
|
||||
|
||||
@@ -204,7 +204,7 @@ do_get (const char *url, int port)
|
||||
curl_easy_setopt (c, CURLOPT_VERBOSE, 1L);
|
||||
#endif
|
||||
curl_easy_setopt (c, CURLOPT_URL, url);
|
||||
curl_easy_setopt (c, CURLOPT_PORT, (long)port);
|
||||
curl_easy_setopt (c, CURLOPT_PORT, (long) port);
|
||||
curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
|
||||
curl_easy_setopt (c, CURLOPT_TIMEOUT, 10L);
|
||||
curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 10L);
|
||||
@@ -215,9 +215,9 @@ do_get (const char *url, int port)
|
||||
/* TODO merge into send_curl_req */
|
||||
curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0L);
|
||||
curl_easy_setopt (c, CURLOPT_SSL_VERIFYHOST, 2L);
|
||||
sprintf(buf, "host1:%d:127.0.0.1", port);
|
||||
sprintf (buf, "host1:%d:127.0.0.1", port);
|
||||
dns_info = curl_slist_append (NULL, buf);
|
||||
sprintf(buf, "host2:%d:127.0.0.1", port);
|
||||
sprintf (buf, "host2:%d:127.0.0.1", port);
|
||||
dns_info = curl_slist_append (dns_info, buf);
|
||||
curl_easy_setopt (c, CURLOPT_RESOLVE, dns_info);
|
||||
curl_easy_setopt (c, CURLOPT_FAILONERROR, 1L);
|
||||
@@ -227,23 +227,23 @@ do_get (const char *url, int port)
|
||||
crashes on my system! */
|
||||
curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1L);
|
||||
if (CURLE_OK != (errornum = curl_easy_perform (c)))
|
||||
{
|
||||
fprintf (stderr, "curl_easy_perform failed: `%s'\n",
|
||||
curl_easy_strerror (errornum));
|
||||
curl_easy_cleanup (c);
|
||||
free (cbc.buf);
|
||||
curl_slist_free_all (dns_info);
|
||||
return errornum;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "curl_easy_perform failed: `%s'\n",
|
||||
curl_easy_strerror (errornum));
|
||||
curl_easy_cleanup (c);
|
||||
free (cbc.buf);
|
||||
curl_slist_free_all (dns_info);
|
||||
return errornum;
|
||||
}
|
||||
|
||||
curl_easy_cleanup (c);
|
||||
curl_slist_free_all (dns_info);
|
||||
if (memcmp (cbc.buf, test_data, len) != 0)
|
||||
{
|
||||
fprintf (stderr, "Error: local file & received file differ.\n");
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Error: local file & received file differ.\n");
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
free (cbc.buf);
|
||||
return 0;
|
||||
@@ -256,7 +256,7 @@ main (int argc, char *const *argv)
|
||||
unsigned int error_count = 0;
|
||||
struct MHD_Daemon *d;
|
||||
int port;
|
||||
(void)argc; /* Unused. Silent compiler warning. */
|
||||
(void) argc; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT))
|
||||
port = 0;
|
||||
@@ -269,36 +269,40 @@ main (int argc, char *const *argv)
|
||||
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
#endif
|
||||
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
if (NULL == curl_version_info (CURLVERSION_NOW)->ssl_version)
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
|
||||
load_keys ("host1", ABS_SRCDIR "/host1.crt", ABS_SRCDIR "/host1.key");
|
||||
load_keys ("host2", ABS_SRCDIR "/host2.crt", ABS_SRCDIR "/host2.key");
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS | MHD_USE_ERROR_LOG,
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG,
|
||||
port,
|
||||
NULL, NULL,
|
||||
&http_ahc, NULL,
|
||||
MHD_OPTION_HTTPS_CERT_CALLBACK, &sni_callback,
|
||||
MHD_OPTION_END);
|
||||
if (d == NULL)
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
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) )
|
||||
{
|
||||
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 -1; }
|
||||
port = (int)dinfo->port;
|
||||
MHD_stop_daemon (d); return -1;
|
||||
}
|
||||
port = (int) dinfo->port;
|
||||
}
|
||||
if (0 != do_get ("https://host1/", port))
|
||||
error_count++;
|
||||
if (0 != do_get ("https://host2/", port))
|
||||
|
||||
@@ -55,10 +55,10 @@ test_tls_session_time_out (gnutls_session_t session, int port)
|
||||
|
||||
sd = socket (AF_INET, SOCK_STREAM, 0);
|
||||
if (sd == MHD_INVALID_SOCKET)
|
||||
{
|
||||
fprintf (stderr, "Failed to create socket: %s\n", strerror (errno));
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Failed to create socket: %s\n", strerror (errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset (&sa, '\0', sizeof (struct sockaddr_in));
|
||||
sa.sin_family = AF_INET;
|
||||
@@ -70,30 +70,30 @@ test_tls_session_time_out (gnutls_session_t session, int port)
|
||||
ret = connect (sd, (struct sockaddr *) &sa, sizeof (struct sockaddr_in));
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf (stderr, "Error: %s\n", MHD_E_FAILED_TO_CONNECT);
|
||||
MHD_socket_close_chk_ (sd);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Error: %s\n", MHD_E_FAILED_TO_CONNECT);
|
||||
MHD_socket_close_chk_ (sd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = gnutls_handshake (session);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf (stderr, "Handshake failed\n");
|
||||
MHD_socket_close_chk_ (sd);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Handshake failed\n");
|
||||
MHD_socket_close_chk_ (sd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
(void)sleep (TIME_OUT + 1);
|
||||
(void) sleep (TIME_OUT + 1);
|
||||
|
||||
/* check that server has closed the connection */
|
||||
/* TODO better RST trigger */
|
||||
if (send (sd, "", 1, 0) == 0)
|
||||
{
|
||||
fprintf (stderr, "Connection failed to time-out\n");
|
||||
MHD_socket_close_chk_ (sd);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Connection failed to time-out\n");
|
||||
MHD_socket_close_chk_ (sd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
MHD_socket_close_chk_ (sd);
|
||||
return 0;
|
||||
@@ -110,7 +110,7 @@ main (int argc, char *const *argv)
|
||||
gnutls_datum_t cert;
|
||||
gnutls_certificate_credentials_t xcred;
|
||||
int port;
|
||||
(void)argc; /* Unused. Silent compiler warning. */
|
||||
(void) argc; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT))
|
||||
port = 0;
|
||||
@@ -126,8 +126,9 @@ main (int argc, char *const *argv)
|
||||
gnutls_global_init ();
|
||||
gnutls_global_set_log_level (11);
|
||||
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS |
|
||||
MHD_USE_ERROR_LOG, port,
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG, port,
|
||||
NULL, NULL, &http_dummy_ahc, NULL,
|
||||
MHD_OPTION_CONNECTION_TIMEOUT, TIME_OUT,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
@@ -135,24 +136,26 @@ main (int argc, char *const *argv)
|
||||
MHD_OPTION_END);
|
||||
|
||||
if (NULL == d)
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
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) )
|
||||
{
|
||||
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 -1; }
|
||||
port = (int)dinfo->port;
|
||||
MHD_stop_daemon (d); return -1;
|
||||
}
|
||||
port = (int) dinfo->port;
|
||||
}
|
||||
|
||||
if (0 != setup_session (&session, &key, &cert, &xcred))
|
||||
{
|
||||
fprintf (stderr, "failed to setup session\n");
|
||||
return 1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "failed to setup session\n");
|
||||
return 1;
|
||||
}
|
||||
errorCount += test_tls_session_time_out (session, port);
|
||||
teardown_session (session, &key, &cert, xcred);
|
||||
|
||||
|
||||
@@ -41,38 +41,41 @@ extern const char srv_signed_key_pem[];
|
||||
|
||||
/* perform a HTTP GET request via SSL/TLS */
|
||||
static int
|
||||
test_secure_get (void * cls, char *cipher_suite, int proto_version)
|
||||
test_secure_get (void *cls, char *cipher_suite, int proto_version)
|
||||
{
|
||||
int ret;
|
||||
struct MHD_Daemon *d;
|
||||
int port;
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT))
|
||||
port = 0;
|
||||
else
|
||||
port = 3070;
|
||||
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS |
|
||||
MHD_USE_ERROR_LOG, port,
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG, port,
|
||||
NULL, NULL, &http_ahc, NULL,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_signed_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_signed_cert_pem,
|
||||
MHD_OPTION_END);
|
||||
|
||||
if (d == NULL)
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
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) )
|
||||
{
|
||||
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 -1; }
|
||||
port = (int)dinfo->port;
|
||||
MHD_stop_daemon (d); return -1;
|
||||
}
|
||||
port = (int) dinfo->port;
|
||||
}
|
||||
|
||||
ret = test_daemon_get (NULL, cipher_suite, proto_version, port, 0);
|
||||
|
||||
@@ -87,8 +90,8 @@ main (int argc, char *const *argv)
|
||||
unsigned int errorCount = 0;
|
||||
char *aes256_sha = "AES256-SHA";
|
||||
FILE *crt;
|
||||
(void)argc;
|
||||
(void)argv; /* Unused. Silent compiler warning. */
|
||||
(void) argc;
|
||||
(void) argv; /* Unused. Silent compiler warning. */
|
||||
|
||||
#ifdef MHD_HTTPS_REQUIRE_GRYPT
|
||||
gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
|
||||
@@ -96,26 +99,26 @@ main (int argc, char *const *argv)
|
||||
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
#endif
|
||||
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
if (NULL == curl_version_info (CURLVERSION_NOW)->ssl_version)
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Curl does not support SSL. Cannot run the test.\n");
|
||||
curl_global_cleanup ();
|
||||
return 77;
|
||||
}
|
||||
|
||||
if (NULL == (crt = setup_ca_cert ()))
|
||||
{
|
||||
fprintf (stderr, MHD_E_TEST_FILE_CREAT);
|
||||
curl_global_cleanup ();
|
||||
return 99;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_TEST_FILE_CREAT);
|
||||
curl_global_cleanup ();
|
||||
return 99;
|
||||
}
|
||||
fclose (crt);
|
||||
if (curl_uses_nss_ssl() == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
if (curl_uses_nss_ssl () == 0)
|
||||
{
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
|
||||
errorCount +=
|
||||
test_secure_get (NULL, aes256_sha, CURL_SSLVERSION_TLSv1);
|
||||
@@ -125,7 +128,7 @@ main (int argc, char *const *argv)
|
||||
curl_global_cleanup ();
|
||||
if (0 != remove (ca_cert_file_name))
|
||||
fprintf (stderr,
|
||||
"Failed to remove `%s'\n",
|
||||
ca_cert_file_name);
|
||||
"Failed to remove `%s'\n",
|
||||
ca_cert_file_name);
|
||||
return errorCount != 0 ? 1 : 0;
|
||||
}
|
||||
@@ -69,20 +69,20 @@ test_hello_extension (gnutls_session_t session, int port, extensions_t exten_t,
|
||||
sd = -1;
|
||||
memset (&cbc, 0, sizeof (struct CBC));
|
||||
if (NULL == (cbc.buf = malloc (sizeof (char) * 256)))
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
cbc.size = 256;
|
||||
|
||||
sd = socket (AF_INET, SOCK_STREAM, 0);
|
||||
if (sd == -1)
|
||||
{
|
||||
fprintf(stderr, "Failed to create socket: %s\n", strerror(errno));
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Failed to create socket: %s\n", strerror (errno));
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
memset (&sa, '\0', sizeof (struct sockaddr_in));
|
||||
sa.sin_family = AF_INET;
|
||||
sa.sin_port = htons (port);
|
||||
@@ -101,10 +101,10 @@ test_hello_extension (gnutls_session_t session, int port, extensions_t exten_t,
|
||||
|
||||
data = MHD_gnutls_malloc (datalen);
|
||||
if (data == NULL)
|
||||
{
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
hver = MHD_gtls_version_max (session);
|
||||
data[pos++] = MHD_gtls_version_get_major (hver);
|
||||
data[pos++] = MHD_gtls_version_get_minor (hver);
|
||||
@@ -119,7 +119,8 @@ test_hello_extension (gnutls_session_t session, int port, extensions_t exten_t,
|
||||
/* generate session client random */
|
||||
memset (session->security_parameters.client_random, 0, TLS_RANDOM_SIZE);
|
||||
gnutls_write_uint32 (time (NULL), rnd);
|
||||
if (GC_OK != MHD_gc_nonce ((char *) &rnd[4], TLS_RANDOM_SIZE - 4)) abort ();
|
||||
if (GC_OK != MHD_gc_nonce ((char *) &rnd[4], TLS_RANDOM_SIZE - 4))
|
||||
abort ();
|
||||
memcpy (session->security_parameters.client_random, rnd, TLS_RANDOM_SIZE);
|
||||
memcpy (&data[pos], rnd, TLS_RANDOM_SIZE);
|
||||
pos += TLS_RANDOM_SIZE;
|
||||
@@ -148,37 +149,37 @@ test_hello_extension (gnutls_session_t session, int port, extensions_t exten_t,
|
||||
gnutls_write_uint16 (exten_data_len, &data[pos]);
|
||||
pos += 2;
|
||||
for (i = 0; i < ext_count; ++i)
|
||||
{
|
||||
/* write extension type */
|
||||
gnutls_write_uint16 (exten_t, &data[pos]);
|
||||
pos += 2;
|
||||
gnutls_write_uint16 (ext_length, &data[pos]);
|
||||
pos += 2;
|
||||
/* we might want to generate random data here */
|
||||
memset (&data[pos], 0, ext_length);
|
||||
pos += ext_length;
|
||||
}
|
||||
{
|
||||
/* write extension type */
|
||||
gnutls_write_uint16 (exten_t, &data[pos]);
|
||||
pos += 2;
|
||||
gnutls_write_uint16 (ext_length, &data[pos]);
|
||||
pos += 2;
|
||||
/* we might want to generate random data here */
|
||||
memset (&data[pos], 0, ext_length);
|
||||
pos += ext_length;
|
||||
}
|
||||
|
||||
if (connect (sd, &sa, sizeof (struct sockaddr_in)) < 0)
|
||||
{
|
||||
fprintf (stderr, "%s\n", MHD_E_FAILED_TO_CONNECT);
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "%s\n", MHD_E_FAILED_TO_CONNECT);
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
gnutls_transport_set_ptr (session, (MHD_gnutls_transport_ptr_t) (long) sd);
|
||||
|
||||
if (gen_test_file_url (url,
|
||||
sizeof (url),
|
||||
port))
|
||||
{
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
{
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* this should crash the server */
|
||||
ret = gnutls_send_handshake (session, data, datalen,
|
||||
GNUTLS_HANDSHAKE_CLIENT_HELLO);
|
||||
GNUTLS_HANDSHAKE_CLIENT_HELLO);
|
||||
|
||||
/* advance to STATE2 */
|
||||
session->internals.handshake_state = STATE2;
|
||||
@@ -190,10 +191,10 @@ test_hello_extension (gnutls_session_t session, int port, extensions_t exten_t,
|
||||
/* make sure daemon is still functioning */
|
||||
if (CURLE_OK != send_curl_req (url, &cbc, "AES128-SHA",
|
||||
MHD_GNUTLS_PROTOCOL_TLS1_2))
|
||||
{
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
{
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if (-1 != sd)
|
||||
@@ -233,34 +234,37 @@ main (int argc, char *const *argv)
|
||||
MHD_gtls_global_set_log_level (11);
|
||||
|
||||
if ((test_fd = setup_test_file ()) == NULL)
|
||||
{
|
||||
fprintf (stderr, MHD_E_TEST_FILE_CREAT);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_TEST_FILE_CREAT);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS |
|
||||
MHD_USE_ERROR_LOG, port,
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION
|
||||
| MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS
|
||||
| MHD_USE_ERROR_LOG, port,
|
||||
NULL, NULL, &http_ahc, NULL,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_END);
|
||||
|
||||
if (d == NULL)
|
||||
{
|
||||
fprintf (stderr, "%s\n", MHD_E_SERVER_INIT);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "%s\n", MHD_E_SERVER_INIT);
|
||||
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) )
|
||||
{
|
||||
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 -1; }
|
||||
port = (int)dinfo->port;
|
||||
MHD_stop_daemon (d); return -1;
|
||||
}
|
||||
port = (int) dinfo->port;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
setup_session (&session, &key, &cert, &xcred);
|
||||
@@ -269,21 +273,21 @@ main (int argc, char *const *argv)
|
||||
#if 1
|
||||
i = 0;
|
||||
while (ext_arr[i] != -1)
|
||||
{
|
||||
setup_session (&session, &key, &cert, &xcred);
|
||||
errorCount += test_hello_extension (session, port, ext_arr[i], 1, 16);
|
||||
teardown_session (session, &key, &cert, xcred);
|
||||
{
|
||||
setup_session (&session, &key, &cert, &xcred);
|
||||
errorCount += test_hello_extension (session, port, ext_arr[i], 1, 16);
|
||||
teardown_session (session, &key, &cert, xcred);
|
||||
|
||||
setup_session (&session, &key, &cert, &xcred);
|
||||
errorCount += test_hello_extension (session, port, ext_arr[i], 3, 8);
|
||||
teardown_session (session, &key, &cert, xcred);
|
||||
setup_session (&session, &key, &cert, &xcred);
|
||||
errorCount += test_hello_extension (session, port, ext_arr[i], 3, 8);
|
||||
teardown_session (session, &key, &cert, xcred);
|
||||
|
||||
/* this test specifically tests the issue raised in CVE-2008-1948 */
|
||||
setup_session (&session, &key, &cert, &xcred);
|
||||
errorCount += test_hello_extension (session, port, ext_arr[i], 6, 0);
|
||||
teardown_session (session, &key, &cert, xcred);
|
||||
i++;
|
||||
}
|
||||
/* this test specifically tests the issue raised in CVE-2008-1948 */
|
||||
setup_session (&session, &key, &cert, &xcred);
|
||||
errorCount += test_hello_extension (session, port, ext_arr[i], 6, 0);
|
||||
teardown_session (session, &key, &cert, xcred);
|
||||
i++;
|
||||
}
|
||||
#endif
|
||||
|
||||
print_test_result (errorCount, argv[0]);
|
||||
|
||||
@@ -43,17 +43,17 @@ int curl_check_version (const char *req_version, ...);
|
||||
*
|
||||
*/
|
||||
static int
|
||||
test_unmatching_ssl_version (void * cls, int port, const char *cipher_suite,
|
||||
test_unmatching_ssl_version (void *cls, int port, const char *cipher_suite,
|
||||
int curl_req_ssl_version)
|
||||
{
|
||||
struct CBC cbc;
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
if (NULL == (cbc.buf = malloc (sizeof (char) * 256)))
|
||||
{
|
||||
fprintf (stderr, "Error: failed to allocate: %s\n",
|
||||
strerror (errno));
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Error: failed to allocate: %s\n",
|
||||
strerror (errno));
|
||||
return -1;
|
||||
}
|
||||
cbc.size = 256;
|
||||
cbc.pos = 0;
|
||||
|
||||
@@ -61,21 +61,22 @@ test_unmatching_ssl_version (void * cls, int port, const char *cipher_suite,
|
||||
if (gen_test_file_url (url,
|
||||
sizeof (url),
|
||||
port))
|
||||
{
|
||||
free (cbc.buf);
|
||||
fprintf (stderr,
|
||||
"Internal error in gen_test_file_url\n");
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
free (cbc.buf);
|
||||
fprintf (stderr,
|
||||
"Internal error in gen_test_file_url\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* assert daemon *rejected* request */
|
||||
if (CURLE_OK ==
|
||||
send_curl_req (url, &cbc, cipher_suite, curl_req_ssl_version))
|
||||
{
|
||||
free (cbc.buf);
|
||||
fprintf (stderr, "cURL failed to reject request despite SSL version mismatch!\n");
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
free (cbc.buf);
|
||||
fprintf (stderr,
|
||||
"cURL failed to reject request despite SSL version mismatch!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
free (cbc.buf);
|
||||
return 0;
|
||||
@@ -89,9 +90,10 @@ main (int argc, char *const *argv)
|
||||
unsigned int errorCount = 0;
|
||||
const char *ssl_version;
|
||||
int daemon_flags =
|
||||
MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_TLS | MHD_USE_ERROR_LOG;
|
||||
MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD
|
||||
| MHD_USE_TLS | MHD_USE_ERROR_LOG;
|
||||
int port;
|
||||
(void)argc; (void)argv; /* Unused. Silent compiler warning. */
|
||||
(void) argc; (void) argv; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (MHD_NO != MHD_is_feature_supported (MHD_FEATURE_AUTODETECT_BIND_PORT))
|
||||
port = 0;
|
||||
@@ -105,10 +107,10 @@ main (int argc, char *const *argv)
|
||||
gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
#endif
|
||||
#endif /* MHD_HTTPS_REQUIRE_GRYPT */
|
||||
if (curl_check_version (MHD_REQ_CURL_VERSION))
|
||||
{
|
||||
return 77;
|
||||
}
|
||||
if (curl_check_version (MHD_REQ_CURL_VERSION))
|
||||
{
|
||||
return 77;
|
||||
}
|
||||
ssl_version = curl_version_info (CURLVERSION_NOW)->ssl_version;
|
||||
if (NULL == ssl_version)
|
||||
{
|
||||
@@ -121,46 +123,48 @@ main (int argc, char *const *argv)
|
||||
return 77;
|
||||
}
|
||||
|
||||
if (!testsuite_curl_global_init ())
|
||||
if (! testsuite_curl_global_init ())
|
||||
return 99;
|
||||
|
||||
const char *aes128_sha = "AES128-SHA";
|
||||
const char *aes256_sha = "AES256-SHA";
|
||||
if (curl_uses_nss_ssl() == 0)
|
||||
{
|
||||
aes128_sha = "rsa_aes_128_sha";
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
if (curl_uses_nss_ssl () == 0)
|
||||
{
|
||||
aes128_sha = "rsa_aes_128_sha";
|
||||
aes256_sha = "rsa_aes_256_sha";
|
||||
}
|
||||
|
||||
|
||||
if (0 !=
|
||||
test_wrap ("TLS1.0-AES-SHA1",
|
||||
&test_https_transfer, NULL, port, daemon_flags,
|
||||
aes128_sha,
|
||||
CURL_SSLVERSION_TLSv1,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_HTTPS_PRIORITIES, "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+RSA:+COMP-NULL",
|
||||
MHD_OPTION_END))
|
||||
{
|
||||
fprintf (stderr, "TLS1.0-AES-SHA1 test failed\n");
|
||||
errorCount++;
|
||||
}
|
||||
test_wrap ("TLS1.0-AES-SHA1",
|
||||
&test_https_transfer, NULL, port, daemon_flags,
|
||||
aes128_sha,
|
||||
CURL_SSLVERSION_TLSv1,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_HTTPS_PRIORITIES,
|
||||
"NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+RSA:+COMP-NULL",
|
||||
MHD_OPTION_END))
|
||||
{
|
||||
fprintf (stderr, "TLS1.0-AES-SHA1 test failed\n");
|
||||
errorCount++;
|
||||
}
|
||||
fprintf (stderr,
|
||||
"The following handshake should fail (and print an error message)...\n");
|
||||
"The following handshake should fail (and print an error message)...\n");
|
||||
if (0 !=
|
||||
test_wrap ("TLS1.0 vs SSL3",
|
||||
&test_unmatching_ssl_version, NULL, port, daemon_flags,
|
||||
aes256_sha,
|
||||
CURL_SSLVERSION_SSLv3,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_HTTPS_PRIORITIES, "NONE:+VERS-TLS1.0:+AES-256-CBC:+SHA1:+RSA:+COMP-NULL",
|
||||
MHD_OPTION_END))
|
||||
{
|
||||
fprintf (stderr, "TLS1.0 vs SSL3 test failed\n");
|
||||
errorCount++;
|
||||
}
|
||||
test_wrap ("TLS1.0 vs SSL3",
|
||||
&test_unmatching_ssl_version, NULL, port, daemon_flags,
|
||||
aes256_sha,
|
||||
CURL_SSLVERSION_SSLv3,
|
||||
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
|
||||
MHD_OPTION_HTTPS_PRIORITIES,
|
||||
"NONE:+VERS-TLS1.0:+AES-256-CBC:+SHA1:+RSA:+COMP-NULL",
|
||||
MHD_OPTION_END))
|
||||
{
|
||||
fprintf (stderr, "TLS1.0 vs SSL3 test failed\n");
|
||||
errorCount++;
|
||||
}
|
||||
curl_global_cleanup ();
|
||||
|
||||
return errorCount != 0 ? 1 : 0;
|
||||
|
||||
@@ -33,26 +33,26 @@ setup_ca_cert ()
|
||||
FILE *cert_fd;
|
||||
|
||||
if (NULL == (cert_fd = fopen (ca_cert_file_name, "wb+")))
|
||||
{
|
||||
fprintf (stderr, "Error: failed to open `%s': %s\n",
|
||||
ca_cert_file_name, strerror (errno));
|
||||
return NULL;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Error: failed to open `%s': %s\n",
|
||||
ca_cert_file_name, strerror (errno));
|
||||
return NULL;
|
||||
}
|
||||
if (fwrite (ca_cert_pem, sizeof (char), strlen (ca_cert_pem) + 1, cert_fd)
|
||||
!= strlen (ca_cert_pem) + 1)
|
||||
{
|
||||
fprintf (stderr, "Error: failed to write `%s. %s'\n",
|
||||
ca_cert_file_name, strerror (errno));
|
||||
fclose (cert_fd);
|
||||
return NULL;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Error: failed to write `%s. %s'\n",
|
||||
ca_cert_file_name, strerror (errno));
|
||||
fclose (cert_fd);
|
||||
return NULL;
|
||||
}
|
||||
if (fflush (cert_fd))
|
||||
{
|
||||
fprintf (stderr, "Error: failed to flush ca cert file stream. %s\n",
|
||||
strerror (errno));
|
||||
fclose (cert_fd);
|
||||
return NULL;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Error: failed to flush ca cert file stream. %s\n",
|
||||
strerror (errno));
|
||||
fclose (cert_fd);
|
||||
return NULL;
|
||||
}
|
||||
return cert_fd;
|
||||
}
|
||||
|
||||
@@ -62,23 +62,23 @@ setup_ca_cert ()
|
||||
*/
|
||||
int
|
||||
test_daemon_get (void *cls,
|
||||
const char *cipher_suite, int proto_version,
|
||||
int port,
|
||||
int ver_peer)
|
||||
const char *cipher_suite, int proto_version,
|
||||
int port,
|
||||
int ver_peer)
|
||||
{
|
||||
CURL *c;
|
||||
struct CBC cbc;
|
||||
CURLcode errornum;
|
||||
char url[255];
|
||||
size_t len;
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
|
||||
len = strlen (test_data);
|
||||
if (NULL == (cbc.buf = malloc (sizeof (char) * len)))
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
return -1;
|
||||
}
|
||||
cbc.size = len;
|
||||
cbc.pos = 0;
|
||||
|
||||
@@ -115,22 +115,22 @@ test_daemon_get (void *cls,
|
||||
crashes on my system! */
|
||||
curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1L);
|
||||
if (CURLE_OK != (errornum = curl_easy_perform (c)))
|
||||
{
|
||||
fprintf (stderr, "curl_easy_perform failed: `%s'\n",
|
||||
curl_easy_strerror (errornum));
|
||||
curl_easy_cleanup (c);
|
||||
free (cbc.buf);
|
||||
return errornum;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "curl_easy_perform failed: `%s'\n",
|
||||
curl_easy_strerror (errornum));
|
||||
curl_easy_cleanup (c);
|
||||
free (cbc.buf);
|
||||
return errornum;
|
||||
}
|
||||
|
||||
curl_easy_cleanup (c);
|
||||
|
||||
if (memcmp (cbc.buf, test_data, len) != 0)
|
||||
{
|
||||
fprintf (stderr, "Error: local file & received file differ.\n");
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "Error: local file & received file differ.\n");
|
||||
free (cbc.buf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
free (cbc.buf);
|
||||
return 0;
|
||||
@@ -141,7 +141,9 @@ void
|
||||
print_test_result (int test_outcome, char *test_name)
|
||||
{
|
||||
if (test_outcome != 0)
|
||||
fprintf (stderr, "running test: %s [fail: %u]\n", test_name, (unsigned int)test_outcome);
|
||||
fprintf (stderr, "running test: %s [fail: %u]\n", test_name, (unsigned
|
||||
int)
|
||||
test_outcome);
|
||||
#if 0
|
||||
else
|
||||
fprintf (stdout, "running test: %s [pass]\n", test_name);
|
||||
@@ -171,21 +173,21 @@ http_ahc (void *cls, struct MHD_Connection *connection,
|
||||
static int aptr;
|
||||
struct MHD_Response *response;
|
||||
int ret;
|
||||
(void)cls;(void)url;(void)version; /* Unused. Silent compiler warning. */
|
||||
(void)upload_data;(void)upload_data_size; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
|
||||
return MHD_NO; /* unexpected method */
|
||||
if (&aptr != *ptr)
|
||||
{
|
||||
/* do never respond on first call */
|
||||
*ptr = &aptr;
|
||||
return MHD_YES;
|
||||
}
|
||||
{
|
||||
/* do never respond on first call */
|
||||
*ptr = &aptr;
|
||||
return MHD_YES;
|
||||
}
|
||||
*ptr = NULL; /* reset when done */
|
||||
response = MHD_create_response_from_buffer (strlen (test_data),
|
||||
(void *) test_data,
|
||||
MHD_RESPMEM_PERSISTENT);
|
||||
(void *) test_data,
|
||||
MHD_RESPMEM_PERSISTENT);
|
||||
ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
|
||||
MHD_destroy_response (response);
|
||||
return ret;
|
||||
@@ -198,9 +200,9 @@ http_dummy_ahc (void *cls, struct MHD_Connection *connection,
|
||||
const char *upload_data, size_t *upload_data_size,
|
||||
void **ptr)
|
||||
{
|
||||
(void)cls;(void)connection;(void)url;(void)method;(void)version; /* Unused. Silent compiler warning. */
|
||||
(void)upload_data;(void)upload_data_size;(void)ptr; /* Unused. Silent compiler warning. */
|
||||
return 0;
|
||||
(void) cls; (void) connection; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data; (void) upload_data_size; (void) ptr; /* Unused. Silent compiler warning. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -213,7 +215,7 @@ http_dummy_ahc (void *cls, struct MHD_Connection *connection,
|
||||
*/
|
||||
/* TODO have test wrap consider a NULL cbc */
|
||||
int
|
||||
send_curl_req (char *url, struct CBC * cbc, const char *cipher_suite,
|
||||
send_curl_req (char *url, struct CBC *cbc, const char *cipher_suite,
|
||||
int proto_version)
|
||||
{
|
||||
CURL *c;
|
||||
@@ -228,10 +230,10 @@ send_curl_req (char *url, struct CBC * cbc, const char *cipher_suite,
|
||||
curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 60L);
|
||||
|
||||
if (cbc != NULL)
|
||||
{
|
||||
curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer);
|
||||
curl_easy_setopt (c, CURLOPT_FILE, cbc);
|
||||
}
|
||||
{
|
||||
curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer);
|
||||
curl_easy_setopt (c, CURLOPT_FILE, cbc);
|
||||
}
|
||||
|
||||
/* TLS options */
|
||||
curl_easy_setopt (c, CURLOPT_SSLVERSION, proto_version);
|
||||
@@ -248,12 +250,12 @@ send_curl_req (char *url, struct CBC * cbc, const char *cipher_suite,
|
||||
crashes on my system! */
|
||||
curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1L);
|
||||
if (CURLE_OK != (errornum = curl_easy_perform (c)))
|
||||
{
|
||||
fprintf (stderr, "curl_easy_perform failed: `%s'\n",
|
||||
curl_easy_strerror (errornum));
|
||||
curl_easy_cleanup (c);
|
||||
return errornum;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "curl_easy_perform failed: `%s'\n",
|
||||
curl_easy_strerror (errornum));
|
||||
curl_easy_cleanup (c);
|
||||
return errornum;
|
||||
}
|
||||
curl_easy_cleanup (c);
|
||||
|
||||
return CURLE_OK;
|
||||
@@ -286,27 +288,27 @@ gen_test_file_url (char *url,
|
||||
size_t i;
|
||||
#endif /* ! WINDOWS */
|
||||
if (NULL == (doc_path = malloc (doc_path_len)))
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
return -1;
|
||||
}
|
||||
if (NULL == getcwd (doc_path, doc_path_len))
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Error: failed to get working directory. %s\n",
|
||||
strerror (errno));
|
||||
free (doc_path);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Error: failed to get working directory. %s\n",
|
||||
strerror (errno));
|
||||
free (doc_path);
|
||||
return -1;
|
||||
}
|
||||
#ifdef WINDOWS
|
||||
for (i = 0; i < doc_path_len; i++)
|
||||
{
|
||||
if (doc_path[i] == 0)
|
||||
break;
|
||||
if (doc_path[i] == '\\')
|
||||
{
|
||||
doc_path[i] = '/';
|
||||
}
|
||||
{
|
||||
doc_path[i] = '/';
|
||||
}
|
||||
if (doc_path[i] != ':')
|
||||
continue;
|
||||
if (i == 0)
|
||||
@@ -322,7 +324,7 @@ gen_test_file_url (char *url,
|
||||
"https://127.0.0.1",
|
||||
port,
|
||||
doc_path,
|
||||
"urlpath") >= (long long)url_len)
|
||||
"urlpath") >= (long long) url_len)
|
||||
ret = -1;
|
||||
|
||||
free (doc_path);
|
||||
@@ -343,41 +345,41 @@ test_https_transfer (void *cls,
|
||||
int ret = 0;
|
||||
struct CBC cbc;
|
||||
char url[255];
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
|
||||
len = strlen (test_data);
|
||||
if (NULL == (cbc.buf = malloc (sizeof (char) * len)))
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_MEM);
|
||||
return -1;
|
||||
}
|
||||
cbc.size = len;
|
||||
cbc.pos = 0;
|
||||
|
||||
if (gen_test_file_url (url,
|
||||
sizeof (url),
|
||||
port))
|
||||
{
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
{
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (CURLE_OK !=
|
||||
send_curl_req (url, &cbc, cipher_suite, proto_version))
|
||||
{
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
{
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* compare test file & daemon responce */
|
||||
if ( (len != strlen (test_data)) ||
|
||||
(memcmp (cbc.buf,
|
||||
test_data,
|
||||
len) != 0) )
|
||||
{
|
||||
fprintf (stderr, "Error: local file & received file differ.\n");
|
||||
ret = -1;
|
||||
}
|
||||
test_data,
|
||||
len) != 0) )
|
||||
{
|
||||
fprintf (stderr, "Error: local file & received file differ.\n");
|
||||
ret = -1;
|
||||
}
|
||||
cleanup:
|
||||
free (cbc.buf);
|
||||
return ret;
|
||||
@@ -392,28 +394,29 @@ cleanup:
|
||||
* @return port number on success or zero on failure
|
||||
*/
|
||||
int
|
||||
setup_testcase (struct MHD_Daemon **d, int port, int daemon_flags, va_list arg_list)
|
||||
setup_testcase (struct MHD_Daemon **d, int port, int daemon_flags, va_list
|
||||
arg_list)
|
||||
{
|
||||
*d = MHD_start_daemon_va (daemon_flags, port,
|
||||
NULL, NULL, &http_ahc, NULL, arg_list);
|
||||
|
||||
if (*d == NULL)
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
return 0;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, MHD_E_SERVER_INIT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
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) )
|
||||
{
|
||||
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 0;
|
||||
}
|
||||
port = (int)dinfo->port;
|
||||
MHD_stop_daemon (*d);
|
||||
return 0;
|
||||
}
|
||||
port = (int) dinfo->port;
|
||||
}
|
||||
|
||||
return port;
|
||||
}
|
||||
@@ -425,10 +428,10 @@ teardown_testcase (struct MHD_Daemon *d)
|
||||
}
|
||||
|
||||
int
|
||||
setup_session (gnutls_session_t * session,
|
||||
gnutls_datum_t * key,
|
||||
gnutls_datum_t * cert,
|
||||
gnutls_certificate_credentials_t * xcred)
|
||||
setup_session (gnutls_session_t *session,
|
||||
gnutls_datum_t *key,
|
||||
gnutls_datum_t *cert,
|
||||
gnutls_certificate_credentials_t *xcred)
|
||||
{
|
||||
int ret;
|
||||
const char *err_pos;
|
||||
@@ -437,42 +440,42 @@ setup_session (gnutls_session_t * session,
|
||||
key->size = strlen (srv_key_pem) + 1;
|
||||
key->data = malloc (key->size);
|
||||
if (NULL == key->data)
|
||||
{
|
||||
gnutls_certificate_free_credentials (*xcred);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
gnutls_certificate_free_credentials (*xcred);
|
||||
return -1;
|
||||
}
|
||||
memcpy (key->data, srv_key_pem, key->size);
|
||||
cert->size = strlen (srv_self_signed_cert_pem) + 1;
|
||||
cert->data = malloc (cert->size);
|
||||
if (NULL == cert->data)
|
||||
{
|
||||
gnutls_certificate_free_credentials (*xcred);
|
||||
free (key->data);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
gnutls_certificate_free_credentials (*xcred);
|
||||
free (key->data);
|
||||
return -1;
|
||||
}
|
||||
memcpy (cert->data, srv_self_signed_cert_pem, cert->size);
|
||||
gnutls_certificate_set_x509_key_mem (*xcred, cert, key,
|
||||
GNUTLS_X509_FMT_PEM);
|
||||
GNUTLS_X509_FMT_PEM);
|
||||
gnutls_init (session, GNUTLS_CLIENT);
|
||||
ret = gnutls_priority_set_direct (*session,
|
||||
"NORMAL", &err_pos);
|
||||
"NORMAL", &err_pos);
|
||||
if (ret < 0)
|
||||
{
|
||||
gnutls_deinit (*session);
|
||||
gnutls_certificate_free_credentials (*xcred);
|
||||
free (key->data);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
gnutls_deinit (*session);
|
||||
gnutls_certificate_free_credentials (*xcred);
|
||||
free (key->data);
|
||||
return -1;
|
||||
}
|
||||
gnutls_credentials_set (*session,
|
||||
GNUTLS_CRD_CERTIFICATE,
|
||||
*xcred);
|
||||
GNUTLS_CRD_CERTIFICATE,
|
||||
*xcred);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
teardown_session (gnutls_session_t session,
|
||||
gnutls_datum_t * key,
|
||||
gnutls_datum_t * cert,
|
||||
gnutls_datum_t *key,
|
||||
gnutls_datum_t *cert,
|
||||
gnutls_certificate_credentials_t xcred)
|
||||
{
|
||||
free (key->data);
|
||||
@@ -489,37 +492,37 @@ teardown_session (gnutls_session_t session,
|
||||
/* TODO test_wrap: change sig to (setup_func, test, va_list test_arg) */
|
||||
int
|
||||
test_wrap (const char *test_name, int
|
||||
(*test_function) (void * cls, int port, const char *cipher_suite,
|
||||
int proto_version), void * cls,
|
||||
(*test_function)(void *cls, int port, const char *cipher_suite,
|
||||
int proto_version), void *cls,
|
||||
int port,
|
||||
int daemon_flags, const char *cipher_suite, int proto_version, ...)
|
||||
{
|
||||
int ret;
|
||||
va_list arg_list;
|
||||
struct MHD_Daemon *d;
|
||||
(void)cls; /* Unused. Silent compiler warning. */
|
||||
(void) cls; /* Unused. Silent compiler warning. */
|
||||
|
||||
va_start (arg_list, proto_version);
|
||||
port = setup_testcase (&d, port, daemon_flags, arg_list);
|
||||
if (0 == port)
|
||||
{
|
||||
va_end (arg_list);
|
||||
fprintf (stderr, "Failed to setup testcase %s\n", test_name);
|
||||
return -1;
|
||||
}
|
||||
{
|
||||
va_end (arg_list);
|
||||
fprintf (stderr, "Failed to setup testcase %s\n", test_name);
|
||||
return -1;
|
||||
}
|
||||
#if 0
|
||||
fprintf (stdout, "running test: %s ", test_name);
|
||||
#endif
|
||||
ret = test_function (NULL, port, cipher_suite, proto_version);
|
||||
#if 0
|
||||
if (ret == 0)
|
||||
{
|
||||
fprintf (stdout, "[pass]\n");
|
||||
}
|
||||
{
|
||||
fprintf (stdout, "[pass]\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf (stdout, "[fail]\n");
|
||||
}
|
||||
{
|
||||
fprintf (stdout, "[fail]\n");
|
||||
}
|
||||
#endif
|
||||
teardown_testcase (d);
|
||||
va_end (arg_list);
|
||||
@@ -532,17 +535,19 @@ testsuite_curl_global_init (void)
|
||||
{
|
||||
CURLcode res;
|
||||
#if LIBCURL_VERSION_NUM >= 0x073800
|
||||
if (CURLSSLSET_OK != curl_global_sslset(CURLSSLBACKEND_GNUTLS, NULL, NULL))
|
||||
{
|
||||
if (CURLSSLSET_TOO_LATE == curl_global_sslset(CURLSSLBACKEND_OPENSSL, NULL, NULL))
|
||||
fprintf (stderr, "WARNING: libcurl was already initialised.\n");
|
||||
}
|
||||
if (CURLSSLSET_OK != curl_global_sslset (CURLSSLBACKEND_GNUTLS, NULL, NULL))
|
||||
{
|
||||
if (CURLSSLSET_TOO_LATE == curl_global_sslset (CURLSSLBACKEND_OPENSSL, NULL,
|
||||
NULL))
|
||||
fprintf (stderr, "WARNING: libcurl was already initialised.\n");
|
||||
}
|
||||
#endif /* LIBCURL_VERSION_NUM >= 0x07380 */
|
||||
res = curl_global_init (CURL_GLOBAL_ALL);
|
||||
if (CURLE_OK != res)
|
||||
{
|
||||
fprintf (stderr, "libcurl initialisation error: %s\n", curl_easy_strerror(res));
|
||||
return 0;
|
||||
}
|
||||
{
|
||||
fprintf (stderr, "libcurl initialisation error: %s\n", curl_easy_strerror (
|
||||
res));
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@@ -35,15 +35,18 @@
|
||||
#define test_data "Hello World\n"
|
||||
#define ca_cert_file_name "tmp_ca_cert.pem"
|
||||
|
||||
#define EMPTY_PAGE "<html><head><title>Empty page</title></head><body>Empty page</body></html>"
|
||||
#define PAGE_NOT_FOUND "<html><head><title>File not found</title></head><body>File not found</body></html>"
|
||||
#define EMPTY_PAGE \
|
||||
"<html><head><title>Empty page</title></head><body>Empty page</body></html>"
|
||||
#define PAGE_NOT_FOUND \
|
||||
"<html><head><title>File not found</title></head><body>File not found</body></html>"
|
||||
|
||||
#define MHD_E_MEM "Error: memory error\n"
|
||||
#define MHD_E_SERVER_INIT "Error: failed to start server\n"
|
||||
#define MHD_E_TEST_FILE_CREAT "Error: failed to setup test file\n"
|
||||
#define MHD_E_CERT_FILE_CREAT "Error: failed to setup test certificate\n"
|
||||
#define MHD_E_KEY_FILE_CREAT "Error: failed to setup test certificate\n"
|
||||
#define MHD_E_FAILED_TO_CONNECT "Error: server connection could not be established\n"
|
||||
#define MHD_E_FAILED_TO_CONNECT \
|
||||
"Error: server connection could not be established\n"
|
||||
|
||||
/* TODO rm if unused */
|
||||
struct https_test_data
|
||||
@@ -82,8 +85,8 @@ setup_ca_cert (void);
|
||||
* perform cURL request for file
|
||||
*/
|
||||
int
|
||||
test_daemon_get (void * cls,
|
||||
const char *cipher_suite, int proto_version,
|
||||
test_daemon_get (void *cls,
|
||||
const char *cipher_suite, int proto_version,
|
||||
int port, int ver_peer);
|
||||
|
||||
void
|
||||
@@ -122,31 +125,33 @@ send_curl_req (char *url, struct CBC *cbc, const char *cipher_suite,
|
||||
int proto_version);
|
||||
|
||||
int
|
||||
test_https_transfer (void *cls, int port, const char *cipher_suite, int proto_version);
|
||||
test_https_transfer (void *cls, int port, const char *cipher_suite, int
|
||||
proto_version);
|
||||
|
||||
int
|
||||
setup_testcase (struct MHD_Daemon **d, int port, int daemon_flags, va_list arg_list);
|
||||
setup_testcase (struct MHD_Daemon **d, int port, int daemon_flags, va_list
|
||||
arg_list);
|
||||
|
||||
void
|
||||
teardown_testcase (struct MHD_Daemon *d);
|
||||
|
||||
|
||||
int
|
||||
setup_session (gnutls_session_t * session,
|
||||
gnutls_datum_t * key,
|
||||
gnutls_datum_t * cert,
|
||||
gnutls_certificate_credentials_t * xcred);
|
||||
setup_session (gnutls_session_t *session,
|
||||
gnutls_datum_t *key,
|
||||
gnutls_datum_t *cert,
|
||||
gnutls_certificate_credentials_t *xcred);
|
||||
|
||||
int
|
||||
teardown_session (gnutls_session_t session,
|
||||
gnutls_datum_t * key,
|
||||
gnutls_datum_t * cert,
|
||||
gnutls_datum_t *key,
|
||||
gnutls_datum_t *cert,
|
||||
gnutls_certificate_credentials_t xcred);
|
||||
|
||||
int
|
||||
test_wrap (const char *test_name, int
|
||||
(*test_function) (void * cls, int port, const char *cipher_suite,
|
||||
int proto_version), void * cls,
|
||||
(*test_function)(void *cls, int port, const char *cipher_suite,
|
||||
int proto_version), void *cls,
|
||||
int port,
|
||||
int daemon_flags, const char *cipher_suite, int proto_version, ...);
|
||||
|
||||
|
||||
+130
-130
@@ -24,150 +24,150 @@
|
||||
|
||||
/* Certificate Authority key */
|
||||
const char ca_key_pem[] = "-----BEGIN RSA PRIVATE KEY-----\n"
|
||||
"MIIEowIBAAKCAQEA0EdlP613rjFvEj93tGo9fzBoKWU3CW+AbbfcJ397C89MyZ9J\n"
|
||||
"rlxyLGfa6qVX7CFVNmzgWWfcl2tHlw/fZmWtf/SFgrlkldvuGyY8H3n2HuMsWz/E\n"
|
||||
"h7n5VgwBX8NsP4eZNmikepxpr1mYx25K8FjnsKjAR9jGUSV8UfZ7VLIY0x/yqe+3\n"
|
||||
"32oqc4D/wJbV1AwwvC5Xf9rvHJwcZg57eqbDCL/4GDDk7d9Gark4XK6ZG+FnnxQn\n"
|
||||
"4a4jIdf4FoPp9s0EieHrHwYzs/uBqmfCSF4wXiaO8bmEwtbAsVbZH74Le7ggUbEe\n"
|
||||
"o+jan9XK0dE88AIImGzgoBnlic/Rr7J8OWA+iwIDAQABAoIBAEICZqXkUdpsw2F6\n"
|
||||
"qPMOergNPO3lrKg6ZO8hBs6j2fj3tcPuzljK5sqJDboxNejZ9Zo+rmnXf3Oj5fgL\n"
|
||||
"6UcYMYEsm4W/QRA3uEJ1fzeQnT7Ty9KNprlHaSzquCLEGlIWJSo3xu0vFlWjJUcL\n"
|
||||
"fwemfaOhD/OVUeEU6s5FOngwy6pZUsOajs3fNRtwBGuuXjniKZZlpSf2Wqu3xpHZ\n"
|
||||
"31OF1V0ycUCGPPFtpmUCtnZhS9L8QBTkNtfTIdXv6SfoBRFm0oXb0uL5HGft6yc7\n"
|
||||
"eYRXIscllQciqG3ymJ/y9o0E3A0YsBVauQyi7OEk+Kg8uoYOBkZCIY69hoN2Znlk\n"
|
||||
"OY5S5Z0CgYEA3j8pRAJzvc827KcX4vJf05HYD4aCyaI80fNmx1DgXfglTSGLQ361\n"
|
||||
"6i05YW8WtIvgkma3wF+jJOckBCW/7iq8wAX7Kz75WKGRyyTEb0wSfjx0G8grxX4d\n"
|
||||
"7sTIAAOnQj5WT6E/bkqxQZAYnVtIPxKtSlwts0H/bjPVYwSFchHK7t8CgYEA7+ks\n"
|
||||
"C0EMjF8CDeCfvbOUGiiqAvU3G20LEC3WlJM3AU+J9Jzp6AMkgaIA8J5oNdsbFBn4\n"
|
||||
"N12JPOO+7WRUk6Av8bsh4faE36ThnHohgAL8guRU7jIXvsFyO5yiY7/o/0lES0/V\n"
|
||||
"6xkh/Epj4MReuCGkiD9ifCVAo+dhHskeE9qbYdUCgYA4yBpa7eV0UUTPIcHQkew5\n"
|
||||
"ucFh9hPkQDcZzP4tXlR0rbmaAz/5dp4zvmoyopdCeZpezS+VTtn3y7Y/+QUYbILc\n"
|
||||
"7KpHWkeKhX0iUbp+VQlEh12C25mTU62CG3SdzFEnc5XJsoDqRNsUzSP80B2dP8BW\n"
|
||||
"h0aFzg7csRGLwtP1WOZoMQKBgQCrgsKd+Q8Dexh421DXyX3jhZalLrEKxlXWZy60\n"
|
||||
"YNo98aLqYRNHbpe2pR6O5nARsGYXZMlyq0flY9um0sc0Epyz79g1NoufZrxzpUw1\n"
|
||||
"u+zRlnKxJtaa5KjJvRzKuvPTLYnJXXXM8Na/Cl+E3F3qvQJm9QlvPyKLCmsAGz+J\n"
|
||||
"agsTUQKBgC0wqqJ6b1tbrAD8AVeeAn/IiP1rxYpc3x2s6ikFO2FMHXHC9wgrRPOc\n"
|
||||
"mkokV+DrUOv3I/7jG8wQA/FmBUPy562a1bObIKzg6CPXzrN68AmNnOIVU+H8fdxI\n"
|
||||
"iGyfT8WNpcRmtN11v34qXHwOWGQhpyyk2yNa8VIBSpkShq/EseZ1\n"
|
||||
"-----END RSA PRIVATE KEY-----\n";
|
||||
"MIIEowIBAAKCAQEA0EdlP613rjFvEj93tGo9fzBoKWU3CW+AbbfcJ397C89MyZ9J\n"
|
||||
"rlxyLGfa6qVX7CFVNmzgWWfcl2tHlw/fZmWtf/SFgrlkldvuGyY8H3n2HuMsWz/E\n"
|
||||
"h7n5VgwBX8NsP4eZNmikepxpr1mYx25K8FjnsKjAR9jGUSV8UfZ7VLIY0x/yqe+3\n"
|
||||
"32oqc4D/wJbV1AwwvC5Xf9rvHJwcZg57eqbDCL/4GDDk7d9Gark4XK6ZG+FnnxQn\n"
|
||||
"4a4jIdf4FoPp9s0EieHrHwYzs/uBqmfCSF4wXiaO8bmEwtbAsVbZH74Le7ggUbEe\n"
|
||||
"o+jan9XK0dE88AIImGzgoBnlic/Rr7J8OWA+iwIDAQABAoIBAEICZqXkUdpsw2F6\n"
|
||||
"qPMOergNPO3lrKg6ZO8hBs6j2fj3tcPuzljK5sqJDboxNejZ9Zo+rmnXf3Oj5fgL\n"
|
||||
"6UcYMYEsm4W/QRA3uEJ1fzeQnT7Ty9KNprlHaSzquCLEGlIWJSo3xu0vFlWjJUcL\n"
|
||||
"fwemfaOhD/OVUeEU6s5FOngwy6pZUsOajs3fNRtwBGuuXjniKZZlpSf2Wqu3xpHZ\n"
|
||||
"31OF1V0ycUCGPPFtpmUCtnZhS9L8QBTkNtfTIdXv6SfoBRFm0oXb0uL5HGft6yc7\n"
|
||||
"eYRXIscllQciqG3ymJ/y9o0E3A0YsBVauQyi7OEk+Kg8uoYOBkZCIY69hoN2Znlk\n"
|
||||
"OY5S5Z0CgYEA3j8pRAJzvc827KcX4vJf05HYD4aCyaI80fNmx1DgXfglTSGLQ361\n"
|
||||
"6i05YW8WtIvgkma3wF+jJOckBCW/7iq8wAX7Kz75WKGRyyTEb0wSfjx0G8grxX4d\n"
|
||||
"7sTIAAOnQj5WT6E/bkqxQZAYnVtIPxKtSlwts0H/bjPVYwSFchHK7t8CgYEA7+ks\n"
|
||||
"C0EMjF8CDeCfvbOUGiiqAvU3G20LEC3WlJM3AU+J9Jzp6AMkgaIA8J5oNdsbFBn4\n"
|
||||
"N12JPOO+7WRUk6Av8bsh4faE36ThnHohgAL8guRU7jIXvsFyO5yiY7/o/0lES0/V\n"
|
||||
"6xkh/Epj4MReuCGkiD9ifCVAo+dhHskeE9qbYdUCgYA4yBpa7eV0UUTPIcHQkew5\n"
|
||||
"ucFh9hPkQDcZzP4tXlR0rbmaAz/5dp4zvmoyopdCeZpezS+VTtn3y7Y/+QUYbILc\n"
|
||||
"7KpHWkeKhX0iUbp+VQlEh12C25mTU62CG3SdzFEnc5XJsoDqRNsUzSP80B2dP8BW\n"
|
||||
"h0aFzg7csRGLwtP1WOZoMQKBgQCrgsKd+Q8Dexh421DXyX3jhZalLrEKxlXWZy60\n"
|
||||
"YNo98aLqYRNHbpe2pR6O5nARsGYXZMlyq0flY9um0sc0Epyz79g1NoufZrxzpUw1\n"
|
||||
"u+zRlnKxJtaa5KjJvRzKuvPTLYnJXXXM8Na/Cl+E3F3qvQJm9QlvPyKLCmsAGz+J\n"
|
||||
"agsTUQKBgC0wqqJ6b1tbrAD8AVeeAn/IiP1rxYpc3x2s6ikFO2FMHXHC9wgrRPOc\n"
|
||||
"mkokV+DrUOv3I/7jG8wQA/FmBUPy562a1bObIKzg6CPXzrN68AmNnOIVU+H8fdxI\n"
|
||||
"iGyfT8WNpcRmtN11v34qXHwOWGQhpyyk2yNa8VIBSpkShq/EseZ1\n"
|
||||
"-----END RSA PRIVATE KEY-----\n";
|
||||
|
||||
/* Certificate Authority cert */
|
||||
const char ca_cert_pem[] = "-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIC6DCCAdKgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
|
||||
"dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
|
||||
"A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
|
||||
"0EdlP613rjFvEj93tGo9fzBoKWU3CW+AbbfcJ397C89MyZ9JrlxyLGfa6qVX7CFV\n"
|
||||
"NmzgWWfcl2tHlw/fZmWtf/SFgrlkldvuGyY8H3n2HuMsWz/Eh7n5VgwBX8NsP4eZ\n"
|
||||
"Nmikepxpr1mYx25K8FjnsKjAR9jGUSV8UfZ7VLIY0x/yqe+332oqc4D/wJbV1Aww\n"
|
||||
"vC5Xf9rvHJwcZg57eqbDCL/4GDDk7d9Gark4XK6ZG+FnnxQn4a4jIdf4FoPp9s0E\n"
|
||||
"ieHrHwYzs/uBqmfCSF4wXiaO8bmEwtbAsVbZH74Le7ggUbEeo+jan9XK0dE88AII\n"
|
||||
"mGzgoBnlic/Rr7J8OWA+iwIDAQABo0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud\n"
|
||||
"DwEB/wQFAwMHBAAwHQYDVR0OBBYEFP2olB4s2T/xuoQ5pT2RKojFwZo2MAsGCSqG\n"
|
||||
"SIb3DQEBBQOCAQEAebD5m+vZkVXa8y+QZ5GtsiR9gpH+LKtdWBjk1kmfSgvQI/xA\n"
|
||||
"aDCV/9BhdNGIBOTYGkln8urWd7g2Mj3TwKEAfNTUFpAsrBAlSSLTGYCSt72S2NsS\n"
|
||||
"L/qUxmj1W6X95UHXCo49mSZx3LlaY3mz1L87gq/kK0XpzA3g2uF25jt84RvshsXy\n"
|
||||
"clOc+eRrVETqFZqer96WB7kzFTv+qmROQKmW8X4a2A5r5Jl4vRwOz5/rEeB9Qs0K\n"
|
||||
"rmK8+5HgvWd80WB8BtfFtZfoY/hHVM8nLD3ELVJrOKiTeIACunQFyT5lV0QkdmSA\n"
|
||||
"CGInU7jzs8nu+s2avf6j+eVZUbVJ+dFMApTJgg==\n"
|
||||
"-----END CERTIFICATE-----\n";
|
||||
"MIIC6DCCAdKgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
|
||||
"dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
|
||||
"A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
|
||||
"0EdlP613rjFvEj93tGo9fzBoKWU3CW+AbbfcJ397C89MyZ9JrlxyLGfa6qVX7CFV\n"
|
||||
"NmzgWWfcl2tHlw/fZmWtf/SFgrlkldvuGyY8H3n2HuMsWz/Eh7n5VgwBX8NsP4eZ\n"
|
||||
"Nmikepxpr1mYx25K8FjnsKjAR9jGUSV8UfZ7VLIY0x/yqe+332oqc4D/wJbV1Aww\n"
|
||||
"vC5Xf9rvHJwcZg57eqbDCL/4GDDk7d9Gark4XK6ZG+FnnxQn4a4jIdf4FoPp9s0E\n"
|
||||
"ieHrHwYzs/uBqmfCSF4wXiaO8bmEwtbAsVbZH74Le7ggUbEeo+jan9XK0dE88AII\n"
|
||||
"mGzgoBnlic/Rr7J8OWA+iwIDAQABo0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud\n"
|
||||
"DwEB/wQFAwMHBAAwHQYDVR0OBBYEFP2olB4s2T/xuoQ5pT2RKojFwZo2MAsGCSqG\n"
|
||||
"SIb3DQEBBQOCAQEAebD5m+vZkVXa8y+QZ5GtsiR9gpH+LKtdWBjk1kmfSgvQI/xA\n"
|
||||
"aDCV/9BhdNGIBOTYGkln8urWd7g2Mj3TwKEAfNTUFpAsrBAlSSLTGYCSt72S2NsS\n"
|
||||
"L/qUxmj1W6X95UHXCo49mSZx3LlaY3mz1L87gq/kK0XpzA3g2uF25jt84RvshsXy\n"
|
||||
"clOc+eRrVETqFZqer96WB7kzFTv+qmROQKmW8X4a2A5r5Jl4vRwOz5/rEeB9Qs0K\n"
|
||||
"rmK8+5HgvWd80WB8BtfFtZfoY/hHVM8nLD3ELVJrOKiTeIACunQFyT5lV0QkdmSA\n"
|
||||
"CGInU7jzs8nu+s2avf6j+eVZUbVJ+dFMApTJgg==\n"
|
||||
"-----END CERTIFICATE-----\n";
|
||||
|
||||
/* test server CA signed certificates */
|
||||
const char srv_signed_cert_pem[] = "-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIDGzCCAgWgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
|
||||
"dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
|
||||
"A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
|
||||
"vfTdv+3fgvVTKRnP/HVNG81cr8TrUP/iiyuve/THMzvFXhCW+K03KwEku55QvnUn\n"
|
||||
"dwBfU/ROzLlv+5hotgiDRNFT3HxurmhouySBrJNJv7qWp8ILq4sw32vo0fbMu5BZ\n"
|
||||
"F49bUXK9L3kW2PdhTtSQPWHEzNrCxO+YgCilKHkY3vQNfdJ020Q5EAAEseD1YtWC\n"
|
||||
"IpRvJzYlZMpjYB1ubTl24kwrgOKUJYKqM4jmF4DVQp4oOK/6QYGGh1QmHRPAy3CB\n"
|
||||
"II6sbb+sZT9cAqU6GYQVB35lm4XAgibXV6KgmpVxVQQ69U6xyoOl204xuekZOaG9\n"
|
||||
"RUPId74Rtmwfi1TLbBzo2wIDAQABo3YwdDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQM\n"
|
||||
"MAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHIAAwHQYDVR0OBBYEFOFi4ilKOP1d\n"
|
||||
"XHlWCMwmVKr7mgy8MB8GA1UdIwQYMBaAFP2olB4s2T/xuoQ5pT2RKojFwZo2MAsG\n"
|
||||
"CSqGSIb3DQEBBQOCAQEAHVWPxazupbOkG7Did+dY9z2z6RjTzYvurTtEKQgzM2Vz\n"
|
||||
"GQBA+3pZ3c5mS97fPIs9hZXfnQeelMeZ2XP1a+9vp35bJjZBBhVH+pqxjCgiUflg\n"
|
||||
"A3Zqy0XwwVCgQLE2HyaU3DLUD/aeIFK5gJaOSdNTXZLv43K8kl4cqDbMeRpVTbkt\n"
|
||||
"YmG4AyEOYRNKGTqMEJXJoxD5E3rBUNrVI/XyTjYrulxbNPcMWEHKNeeqWpKDYTFo\n"
|
||||
"Bb01PCthGXiq/4A2RLAFosadzRa8SBpoSjPPfZ0b2w4MJpReHqKbR5+T2t6hzml6\n"
|
||||
"4ToyOKPDmamiTuN5KzLN3cw7DQlvWMvqSOChPLnA3Q==\n"
|
||||
"-----END CERTIFICATE-----\n";
|
||||
"MIIDGzCCAgWgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
|
||||
"dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
|
||||
"A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
|
||||
"vfTdv+3fgvVTKRnP/HVNG81cr8TrUP/iiyuve/THMzvFXhCW+K03KwEku55QvnUn\n"
|
||||
"dwBfU/ROzLlv+5hotgiDRNFT3HxurmhouySBrJNJv7qWp8ILq4sw32vo0fbMu5BZ\n"
|
||||
"F49bUXK9L3kW2PdhTtSQPWHEzNrCxO+YgCilKHkY3vQNfdJ020Q5EAAEseD1YtWC\n"
|
||||
"IpRvJzYlZMpjYB1ubTl24kwrgOKUJYKqM4jmF4DVQp4oOK/6QYGGh1QmHRPAy3CB\n"
|
||||
"II6sbb+sZT9cAqU6GYQVB35lm4XAgibXV6KgmpVxVQQ69U6xyoOl204xuekZOaG9\n"
|
||||
"RUPId74Rtmwfi1TLbBzo2wIDAQABo3YwdDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQM\n"
|
||||
"MAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHIAAwHQYDVR0OBBYEFOFi4ilKOP1d\n"
|
||||
"XHlWCMwmVKr7mgy8MB8GA1UdIwQYMBaAFP2olB4s2T/xuoQ5pT2RKojFwZo2MAsG\n"
|
||||
"CSqGSIb3DQEBBQOCAQEAHVWPxazupbOkG7Did+dY9z2z6RjTzYvurTtEKQgzM2Vz\n"
|
||||
"GQBA+3pZ3c5mS97fPIs9hZXfnQeelMeZ2XP1a+9vp35bJjZBBhVH+pqxjCgiUflg\n"
|
||||
"A3Zqy0XwwVCgQLE2HyaU3DLUD/aeIFK5gJaOSdNTXZLv43K8kl4cqDbMeRpVTbkt\n"
|
||||
"YmG4AyEOYRNKGTqMEJXJoxD5E3rBUNrVI/XyTjYrulxbNPcMWEHKNeeqWpKDYTFo\n"
|
||||
"Bb01PCthGXiq/4A2RLAFosadzRa8SBpoSjPPfZ0b2w4MJpReHqKbR5+T2t6hzml6\n"
|
||||
"4ToyOKPDmamiTuN5KzLN3cw7DQlvWMvqSOChPLnA3Q==\n"
|
||||
"-----END CERTIFICATE-----\n";
|
||||
|
||||
/* test server key */
|
||||
const char srv_signed_key_pem[] = "-----BEGIN RSA PRIVATE KEY-----\n"
|
||||
"MIIEowIBAAKCAQEAvfTdv+3fgvVTKRnP/HVNG81cr8TrUP/iiyuve/THMzvFXhCW\n"
|
||||
"+K03KwEku55QvnUndwBfU/ROzLlv+5hotgiDRNFT3HxurmhouySBrJNJv7qWp8IL\n"
|
||||
"q4sw32vo0fbMu5BZF49bUXK9L3kW2PdhTtSQPWHEzNrCxO+YgCilKHkY3vQNfdJ0\n"
|
||||
"20Q5EAAEseD1YtWCIpRvJzYlZMpjYB1ubTl24kwrgOKUJYKqM4jmF4DVQp4oOK/6\n"
|
||||
"QYGGh1QmHRPAy3CBII6sbb+sZT9cAqU6GYQVB35lm4XAgibXV6KgmpVxVQQ69U6x\n"
|
||||
"yoOl204xuekZOaG9RUPId74Rtmwfi1TLbBzo2wIDAQABAoIBADu09WSICNq5cMe4\n"
|
||||
"+NKCLlgAT1NiQpLls1gKRbDhKiHU9j8QWNvWWkJWrCya4QdUfLCfeddCMeiQmv3K\n"
|
||||
"lJMvDs+5OjJSHFoOsGiuW2Ias7IjnIojaJalfBml6frhJ84G27IXmdz6gzOiTIer\n"
|
||||
"DjeAgcwBaKH5WwIay2TxIaScl7AwHBauQkrLcyb4hTmZuQh6ArVIN6+pzoVuORXM\n"
|
||||
"bpeNWl2l/HSN3VtUN6aCAKbN/X3o0GavCCMn5Fa85uJFsab4ss/uP+2PusU71+zP\n"
|
||||
"sBm6p/2IbGvF5k3VPDA7X5YX61sukRjRBihY8xSnNYx1UcoOsX6AiPnbhifD8+xQ\n"
|
||||
"Tlf8oJUCgYEA0BTfzqNpr9Wxw5/QXaSdw7S/0eP5a0C/nwURvmfSzuTD4equzbEN\n"
|
||||
"d+dI/s2JMxrdj/I4uoAfUXRGaabevQIjFzC9uyE3LaOyR2zhuvAzX+vVcs6bSXeU\n"
|
||||
"pKpCAcN+3Z3evMaX2f+z/nfSUAl2i4J2R+/LQAWJW4KwRky/m+cxpfUCgYEA6bN1\n"
|
||||
"b73bMgM8wpNt6+fcmS+5n0iZihygQ2U2DEud8nZJL4Nrm1dwTnfZfJBnkGj6+0Q0\n"
|
||||
"cOwj2KS0/wcEdJBP0jucU4v60VMhp75AQeHqidIde0bTViSRo3HWKXHBIFGYoU3T\n"
|
||||
"LyPyKndbqsOObnsFXHn56Nwhr2HLf6nw4taGQY8CgYBoSW36FLCNbd6QGvLFXBGt\n"
|
||||
"2lMhEM8az/K58kJ4WXSwOLtr6MD/WjNT2tkcy0puEJLm6BFCd6A6pLn9jaKou/92\n"
|
||||
"SfltZjJPb3GUlp9zn5tAAeSSi7YMViBrfuFiHObij5LorefBXISLjuYbMwL03MgH\n"
|
||||
"Ocl2JtA2ywMp2KFXs8GQWQKBgFyIVv5ogQrbZ0pvj31xr9HjqK6d01VxIi+tOmpB\n"
|
||||
"4ocnOLEcaxX12BzprW55ytfOCVpF1jHD/imAhb3YrHXu0fwe6DXYXfZV4SSG2vB7\n"
|
||||
"IB9z14KBN5qLHjNGFpMQXHSMek+b/ftTU0ZnPh9uEM5D3YqRLVd7GcdUhHvG8P8Q\n"
|
||||
"C9aXAoGBAJtID6h8wOGMP0XYX5YYnhlC7dOLfk8UYrzlp3xhqVkzKthTQTj6wx9R\n"
|
||||
"GtC4k7U1ki8oJsfcIlBNXd768fqDVWjYju5rzShMpo8OCTS6ipAblKjCxPPVhIpv\n"
|
||||
"tWPlbSn1qj6wylstJ5/3Z+ZW5H4wIKp5jmLiioDhcP0L/Ex3Zx8O\n"
|
||||
"-----END RSA PRIVATE KEY-----\n";
|
||||
"MIIEowIBAAKCAQEAvfTdv+3fgvVTKRnP/HVNG81cr8TrUP/iiyuve/THMzvFXhCW\n"
|
||||
"+K03KwEku55QvnUndwBfU/ROzLlv+5hotgiDRNFT3HxurmhouySBrJNJv7qWp8IL\n"
|
||||
"q4sw32vo0fbMu5BZF49bUXK9L3kW2PdhTtSQPWHEzNrCxO+YgCilKHkY3vQNfdJ0\n"
|
||||
"20Q5EAAEseD1YtWCIpRvJzYlZMpjYB1ubTl24kwrgOKUJYKqM4jmF4DVQp4oOK/6\n"
|
||||
"QYGGh1QmHRPAy3CBII6sbb+sZT9cAqU6GYQVB35lm4XAgibXV6KgmpVxVQQ69U6x\n"
|
||||
"yoOl204xuekZOaG9RUPId74Rtmwfi1TLbBzo2wIDAQABAoIBADu09WSICNq5cMe4\n"
|
||||
"+NKCLlgAT1NiQpLls1gKRbDhKiHU9j8QWNvWWkJWrCya4QdUfLCfeddCMeiQmv3K\n"
|
||||
"lJMvDs+5OjJSHFoOsGiuW2Ias7IjnIojaJalfBml6frhJ84G27IXmdz6gzOiTIer\n"
|
||||
"DjeAgcwBaKH5WwIay2TxIaScl7AwHBauQkrLcyb4hTmZuQh6ArVIN6+pzoVuORXM\n"
|
||||
"bpeNWl2l/HSN3VtUN6aCAKbN/X3o0GavCCMn5Fa85uJFsab4ss/uP+2PusU71+zP\n"
|
||||
"sBm6p/2IbGvF5k3VPDA7X5YX61sukRjRBihY8xSnNYx1UcoOsX6AiPnbhifD8+xQ\n"
|
||||
"Tlf8oJUCgYEA0BTfzqNpr9Wxw5/QXaSdw7S/0eP5a0C/nwURvmfSzuTD4equzbEN\n"
|
||||
"d+dI/s2JMxrdj/I4uoAfUXRGaabevQIjFzC9uyE3LaOyR2zhuvAzX+vVcs6bSXeU\n"
|
||||
"pKpCAcN+3Z3evMaX2f+z/nfSUAl2i4J2R+/LQAWJW4KwRky/m+cxpfUCgYEA6bN1\n"
|
||||
"b73bMgM8wpNt6+fcmS+5n0iZihygQ2U2DEud8nZJL4Nrm1dwTnfZfJBnkGj6+0Q0\n"
|
||||
"cOwj2KS0/wcEdJBP0jucU4v60VMhp75AQeHqidIde0bTViSRo3HWKXHBIFGYoU3T\n"
|
||||
"LyPyKndbqsOObnsFXHn56Nwhr2HLf6nw4taGQY8CgYBoSW36FLCNbd6QGvLFXBGt\n"
|
||||
"2lMhEM8az/K58kJ4WXSwOLtr6MD/WjNT2tkcy0puEJLm6BFCd6A6pLn9jaKou/92\n"
|
||||
"SfltZjJPb3GUlp9zn5tAAeSSi7YMViBrfuFiHObij5LorefBXISLjuYbMwL03MgH\n"
|
||||
"Ocl2JtA2ywMp2KFXs8GQWQKBgFyIVv5ogQrbZ0pvj31xr9HjqK6d01VxIi+tOmpB\n"
|
||||
"4ocnOLEcaxX12BzprW55ytfOCVpF1jHD/imAhb3YrHXu0fwe6DXYXfZV4SSG2vB7\n"
|
||||
"IB9z14KBN5qLHjNGFpMQXHSMek+b/ftTU0ZnPh9uEM5D3YqRLVd7GcdUhHvG8P8Q\n"
|
||||
"C9aXAoGBAJtID6h8wOGMP0XYX5YYnhlC7dOLfk8UYrzlp3xhqVkzKthTQTj6wx9R\n"
|
||||
"GtC4k7U1ki8oJsfcIlBNXd768fqDVWjYju5rzShMpo8OCTS6ipAblKjCxPPVhIpv\n"
|
||||
"tWPlbSn1qj6wylstJ5/3Z+ZW5H4wIKp5jmLiioDhcP0L/Ex3Zx8O\n"
|
||||
"-----END RSA PRIVATE KEY-----\n";
|
||||
|
||||
/* test server self signed certificates */
|
||||
const char srv_self_signed_cert_pem[] = "-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIC+jCCAeSgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
|
||||
"dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
|
||||
"A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
|
||||
"tDEagv3p9OUhUL55jMucxjNK9N5cuozhcnrwDfBSU6oVrqm5kPqO1I7Cggzw68Y5\n"
|
||||
"jhTcBi4FXmYOZppm1R3MhSJ5JSi/67Q7X4J5rnJLXYGN27qjMpnoGQ/2xmsNG/is\n"
|
||||
"i+h/2vbtPU+WP9SEJnTfPLLpZ7KqCAk7FUUzKsuLx3/SOKtdkrWxPKwYTgnDEN6D\n"
|
||||
"JL7tEzCnG5DFc4mQ7YW9PaRdC3rS1T8PvQ3jB2BUnohM0cFvKRuiU35tU7h7CPbL\n"
|
||||
"4L66VglXoiwqmgcrwI2U968bD0+wRQ5c5bzNoshJOzN6CTMh1IhbklSh/Z6FA/e8\n"
|
||||
"hj0yVo2tdllXuJGVs3PIEwIDAQABo1UwUzAMBgNVHRMBAf8EAjAAMBMGA1UdJQQM\n"
|
||||
"MAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHIAAwHQYDVR0OBBYEFDfU7pAv9LYn\n"
|
||||
"n7jb4WHl4+Vgi2FnMAsGCSqGSIb3DQEBBQOCAQEAkaembPQMmv6OOjbIod8zTatr\n"
|
||||
"x5Bwkwp3TOE1NRyy2OytzFIYRUkNrZYlcmrxcbNNycIK41CNVXbriFCF8gcmIq9y\n"
|
||||
"vaKZn8Gcy+vGggv+1BP9IAPBGKRwSi0wmq9JoGE8hx+qqTpRSdfbM/cps/09hicO\n"
|
||||
"0EIR7kWEbvnpMBcMKYOtYE9Gce7rdSMWVAsKc174xn8vW6TxCUvmWFv5DPg5HG1v\n"
|
||||
"y1SUX73qafRo+W6FN4UC/DHfwRhF8RSKEnVbmgDVCs6GHdKBjU2qRgYyj6nWZqK1\n"
|
||||
"XFUTWgia+Fl3D9vlsXaFcSZKA0Bq1eojl0B0AfeYAxTFwPWXscKvt/bXZfH8bg==\n"
|
||||
"-----END CERTIFICATE-----\n";
|
||||
"MIIC+jCCAeSgAwIBAgIES0KCvTALBgkqhkiG9w0BAQUwFzEVMBMGA1UEAxMMdGVz\n"
|
||||
"dF9jYV9jZXJ0MB4XDTEwMDEwNTAwMDcyNVoXDTQ1MDMxMjAwMDcyNVowFzEVMBMG\n"
|
||||
"A1UEAxMMdGVzdF9jYV9jZXJ0MIIBHzALBgkqhkiG9w0BAQEDggEOADCCAQkCggEA\n"
|
||||
"tDEagv3p9OUhUL55jMucxjNK9N5cuozhcnrwDfBSU6oVrqm5kPqO1I7Cggzw68Y5\n"
|
||||
"jhTcBi4FXmYOZppm1R3MhSJ5JSi/67Q7X4J5rnJLXYGN27qjMpnoGQ/2xmsNG/is\n"
|
||||
"i+h/2vbtPU+WP9SEJnTfPLLpZ7KqCAk7FUUzKsuLx3/SOKtdkrWxPKwYTgnDEN6D\n"
|
||||
"JL7tEzCnG5DFc4mQ7YW9PaRdC3rS1T8PvQ3jB2BUnohM0cFvKRuiU35tU7h7CPbL\n"
|
||||
"4L66VglXoiwqmgcrwI2U968bD0+wRQ5c5bzNoshJOzN6CTMh1IhbklSh/Z6FA/e8\n"
|
||||
"hj0yVo2tdllXuJGVs3PIEwIDAQABo1UwUzAMBgNVHRMBAf8EAjAAMBMGA1UdJQQM\n"
|
||||
"MAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHIAAwHQYDVR0OBBYEFDfU7pAv9LYn\n"
|
||||
"n7jb4WHl4+Vgi2FnMAsGCSqGSIb3DQEBBQOCAQEAkaembPQMmv6OOjbIod8zTatr\n"
|
||||
"x5Bwkwp3TOE1NRyy2OytzFIYRUkNrZYlcmrxcbNNycIK41CNVXbriFCF8gcmIq9y\n"
|
||||
"vaKZn8Gcy+vGggv+1BP9IAPBGKRwSi0wmq9JoGE8hx+qqTpRSdfbM/cps/09hicO\n"
|
||||
"0EIR7kWEbvnpMBcMKYOtYE9Gce7rdSMWVAsKc174xn8vW6TxCUvmWFv5DPg5HG1v\n"
|
||||
"y1SUX73qafRo+W6FN4UC/DHfwRhF8RSKEnVbmgDVCs6GHdKBjU2qRgYyj6nWZqK1\n"
|
||||
"XFUTWgia+Fl3D9vlsXaFcSZKA0Bq1eojl0B0AfeYAxTFwPWXscKvt/bXZfH8bg==\n"
|
||||
"-----END CERTIFICATE-----\n";
|
||||
|
||||
/* test server key */
|
||||
const char srv_key_pem[] = "-----BEGIN RSA PRIVATE KEY-----\n"
|
||||
"MIIEpAIBAAKCAQEAtDEagv3p9OUhUL55jMucxjNK9N5cuozhcnrwDfBSU6oVrqm5\n"
|
||||
"kPqO1I7Cggzw68Y5jhTcBi4FXmYOZppm1R3MhSJ5JSi/67Q7X4J5rnJLXYGN27qj\n"
|
||||
"MpnoGQ/2xmsNG/isi+h/2vbtPU+WP9SEJnTfPLLpZ7KqCAk7FUUzKsuLx3/SOKtd\n"
|
||||
"krWxPKwYTgnDEN6DJL7tEzCnG5DFc4mQ7YW9PaRdC3rS1T8PvQ3jB2BUnohM0cFv\n"
|
||||
"KRuiU35tU7h7CPbL4L66VglXoiwqmgcrwI2U968bD0+wRQ5c5bzNoshJOzN6CTMh\n"
|
||||
"1IhbklSh/Z6FA/e8hj0yVo2tdllXuJGVs3PIEwIDAQABAoIBAAEtcg+LFLGtoxjq\n"
|
||||
"b+tFttBJfbRcfdG6ocYqBGmUXF+MgFs573DHX3sHNOQxlaNHtSgIclF1eYgNZFFt\n"
|
||||
"VLIoBFTzfEQXoFosPUDoEuqVMeXLttmD7P2jwL780XJLZ4Xj6GY07npq1iGBcEZf\n"
|
||||
"yCcdoyGkr9jgc5Auyis8DStGg/jfUBC4NBvF0GnuuNPAdYRPKUpKw9EatI+FdMjy\n"
|
||||
"BuroD90fhdkK8EwMEVb9P17bdIc1MCIZFpUE9YHjVdK/oxCUhQ8KRfdbI4JU5Zh3\n"
|
||||
"UtO6Jm2wFuP3VmeVpPvE/C2rxI70pyl6HMSiFGNc0rhJYCQ+yhohWj7nZ67H4vLx\n"
|
||||
"plv5LxkCgYEAz7ewou8oFafDAMNoxaqKudvUg+lxXewdLDKaYBF5ACi9uAPCJ+v7\n"
|
||||
"M5c/fvPFn/XHzo7xaXbtTAH3Z5xzBs+80OsvL+e1Ut4xR+ELRkybknh/s2wQeABk\n"
|
||||
"Kb0vA59ukQGj12LV5phZMaVoXe6KJ7hZnN62d3K6m1wGE/k58i4pPLUCgYEA3hN8\n"
|
||||
"G95zW7g0jVdSr+KUeVmephph9yh8Yb+3I3ojwOIv6d45TopGx8pFZlnBAMZf1ZQx\n"
|
||||
"DIhzJNnaqZy/4w7RNaOGWnPA/5f+MIoHBiLGEEmfHC3lt087Yp9OuwDUHwpETYdV\n"
|
||||
"o+KBCvVh60Et3bZUgF/1k/3YXxn8J5dsmJsjNqcCgYBLflyRa1BrRnTGMz9CEDCp\n"
|
||||
"Si9b3h1Y4Hbd2GppHhCXMTd6yMrpDYhYANGQB3M9Juv+s88j4JhwNoq/uonH4Pqk\n"
|
||||
"B8Y3qAQr4RuSH0WkwDUOsALhqBX4N1QwI1USAQEDbNAqeP5698X7GD3tXcQSmZrg\n"
|
||||
"O8WfdjBCRNjkq4EW9xX/vQKBgQDONtmwJ0iHiu2BseyeVo/4fzfKlgUSNQ4K1rOA\n"
|
||||
"xhIdMeu8Bxa/z7caHsGC4SVPSuYCtbE2Kh6BwapChcPJXCD45fgEViiJLuJiwEj1\n"
|
||||
"caTpyvNsf1IoffJvCe9ZxtMyX549P8ZOgC3Dt0hN5CBrGLwu2Ox5l+YrqT10pi+5\n"
|
||||
"JZX1UQKBgQCrcXrdkkDAc/a4+PxNRpJRLcU4fhv8/lr+UWItE8eUe7bd25bTQfQm\n"
|
||||
"VpNKc/kAJ66PjIED6fy3ADhd2y4naT2a24uAgQ/M494J68qLnGh6K4JU/09uxR2v\n"
|
||||
"1i2q/4FNLdFFk1XP4iNnTHRLZ+NYr2p5Y9RcvQfTjOauz8Ahav0lyg==\n"
|
||||
"-----END RSA PRIVATE KEY-----\n";
|
||||
"MIIEpAIBAAKCAQEAtDEagv3p9OUhUL55jMucxjNK9N5cuozhcnrwDfBSU6oVrqm5\n"
|
||||
"kPqO1I7Cggzw68Y5jhTcBi4FXmYOZppm1R3MhSJ5JSi/67Q7X4J5rnJLXYGN27qj\n"
|
||||
"MpnoGQ/2xmsNG/isi+h/2vbtPU+WP9SEJnTfPLLpZ7KqCAk7FUUzKsuLx3/SOKtd\n"
|
||||
"krWxPKwYTgnDEN6DJL7tEzCnG5DFc4mQ7YW9PaRdC3rS1T8PvQ3jB2BUnohM0cFv\n"
|
||||
"KRuiU35tU7h7CPbL4L66VglXoiwqmgcrwI2U968bD0+wRQ5c5bzNoshJOzN6CTMh\n"
|
||||
"1IhbklSh/Z6FA/e8hj0yVo2tdllXuJGVs3PIEwIDAQABAoIBAAEtcg+LFLGtoxjq\n"
|
||||
"b+tFttBJfbRcfdG6ocYqBGmUXF+MgFs573DHX3sHNOQxlaNHtSgIclF1eYgNZFFt\n"
|
||||
"VLIoBFTzfEQXoFosPUDoEuqVMeXLttmD7P2jwL780XJLZ4Xj6GY07npq1iGBcEZf\n"
|
||||
"yCcdoyGkr9jgc5Auyis8DStGg/jfUBC4NBvF0GnuuNPAdYRPKUpKw9EatI+FdMjy\n"
|
||||
"BuroD90fhdkK8EwMEVb9P17bdIc1MCIZFpUE9YHjVdK/oxCUhQ8KRfdbI4JU5Zh3\n"
|
||||
"UtO6Jm2wFuP3VmeVpPvE/C2rxI70pyl6HMSiFGNc0rhJYCQ+yhohWj7nZ67H4vLx\n"
|
||||
"plv5LxkCgYEAz7ewou8oFafDAMNoxaqKudvUg+lxXewdLDKaYBF5ACi9uAPCJ+v7\n"
|
||||
"M5c/fvPFn/XHzo7xaXbtTAH3Z5xzBs+80OsvL+e1Ut4xR+ELRkybknh/s2wQeABk\n"
|
||||
"Kb0vA59ukQGj12LV5phZMaVoXe6KJ7hZnN62d3K6m1wGE/k58i4pPLUCgYEA3hN8\n"
|
||||
"G95zW7g0jVdSr+KUeVmephph9yh8Yb+3I3ojwOIv6d45TopGx8pFZlnBAMZf1ZQx\n"
|
||||
"DIhzJNnaqZy/4w7RNaOGWnPA/5f+MIoHBiLGEEmfHC3lt087Yp9OuwDUHwpETYdV\n"
|
||||
"o+KBCvVh60Et3bZUgF/1k/3YXxn8J5dsmJsjNqcCgYBLflyRa1BrRnTGMz9CEDCp\n"
|
||||
"Si9b3h1Y4Hbd2GppHhCXMTd6yMrpDYhYANGQB3M9Juv+s88j4JhwNoq/uonH4Pqk\n"
|
||||
"B8Y3qAQr4RuSH0WkwDUOsALhqBX4N1QwI1USAQEDbNAqeP5698X7GD3tXcQSmZrg\n"
|
||||
"O8WfdjBCRNjkq4EW9xX/vQKBgQDONtmwJ0iHiu2BseyeVo/4fzfKlgUSNQ4K1rOA\n"
|
||||
"xhIdMeu8Bxa/z7caHsGC4SVPSuYCtbE2Kh6BwapChcPJXCD45fgEViiJLuJiwEj1\n"
|
||||
"caTpyvNsf1IoffJvCe9ZxtMyX549P8ZOgC3Dt0hN5CBrGLwu2Ox5l+YrqT10pi+5\n"
|
||||
"JZX1UQKBgQCrcXrdkkDAc/a4+PxNRpJRLcU4fhv8/lr+UWItE8eUe7bd25bTQfQm\n"
|
||||
"VpNKc/kAJ66PjIED6fy3ADhd2y4naT2a24uAgQ/M494J68qLnGh6K4JU/09uxR2v\n"
|
||||
"1i2q/4FNLdFFk1XP4iNnTHRLZ+NYr2p5Y9RcvQfTjOauz8Ahav0lyg==\n"
|
||||
"-----END RSA PRIVATE KEY-----\n";
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user