forked from wolfSSL/wolfssl
Merge branch 'master' of github.com:cyassl/cyassl
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@ -78,3 +78,5 @@ clang_output_*
|
|||||||
internal.plist
|
internal.plist
|
||||||
cov-int
|
cov-int
|
||||||
cyassl.tgz
|
cyassl.tgz
|
||||||
|
*.log
|
||||||
|
*.trs
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include <cyassl/ctaocrypt/sha256.h>
|
#include <cyassl/ctaocrypt/sha256.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CYASSL_SHA384
|
#ifdef CYASSL_SHA512
|
||||||
#include <cyassl/ctaocrypt/sha512.h>
|
#include <cyassl/ctaocrypt/sha512.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@
|
|||||||
|
|
||||||
typedef struct tcp_ready {
|
typedef struct tcp_ready {
|
||||||
int ready; /* predicate */
|
int ready; /* predicate */
|
||||||
|
int port;
|
||||||
#ifdef _POSIX_THREADS
|
#ifdef _POSIX_THREADS
|
||||||
pthread_mutex_t mutex;
|
pthread_mutex_t mutex;
|
||||||
pthread_cond_t cond;
|
pthread_cond_t cond;
|
||||||
@ -454,14 +455,14 @@ static INLINE int tcp_select(SOCKET_T socketfd, int to_sec)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static INLINE void tcp_listen(SOCKET_T* sockfd, int port, int useAnyAddr,
|
static INLINE void tcp_listen(SOCKET_T* sockfd, int* port, int useAnyAddr,
|
||||||
int udp)
|
int udp)
|
||||||
{
|
{
|
||||||
SOCKADDR_IN_T addr;
|
SOCKADDR_IN_T addr;
|
||||||
|
|
||||||
/* don't use INADDR_ANY by default, firewall may block, make user switch
|
/* don't use INADDR_ANY by default, firewall may block, make user switch
|
||||||
on */
|
on */
|
||||||
build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), port);
|
build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), *port);
|
||||||
tcp_socket(sockfd, udp);
|
tcp_socket(sockfd, udp);
|
||||||
|
|
||||||
#ifndef USE_WINDOWS_API
|
#ifndef USE_WINDOWS_API
|
||||||
@ -480,6 +481,14 @@ static INLINE void tcp_listen(SOCKET_T* sockfd, int port, int useAnyAddr,
|
|||||||
if (listen(*sockfd, 5) != 0)
|
if (listen(*sockfd, 5) != 0)
|
||||||
err_sys("tcp listen failed");
|
err_sys("tcp listen failed");
|
||||||
}
|
}
|
||||||
|
#if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)
|
||||||
|
if (*port == 0)
|
||||||
|
{
|
||||||
|
socklen_t len = sizeof(addr);
|
||||||
|
if (getsockname(*sockfd, (struct sockaddr*)&addr, &len) == 0)
|
||||||
|
*port = ntohs(addr.sin_port);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -504,12 +513,12 @@ static INLINE int udp_read_connect(SOCKET_T sockfd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static INLINE void udp_accept(SOCKET_T* sockfd, int* clientfd, int useAnyAddr,
|
static INLINE void udp_accept(SOCKET_T* sockfd, int* clientfd, int useAnyAddr,
|
||||||
func_args* args)
|
int port, func_args* args)
|
||||||
{
|
{
|
||||||
SOCKADDR_IN_T addr;
|
SOCKADDR_IN_T addr;
|
||||||
|
|
||||||
(void)args;
|
(void)args;
|
||||||
build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), yasslPort);
|
build_addr(&addr, (useAnyAddr ? INADDR_ANY : yasslIP), port);
|
||||||
tcp_socket(sockfd, 1);
|
tcp_socket(sockfd, 1);
|
||||||
|
|
||||||
|
|
||||||
@ -526,12 +535,22 @@ static INLINE void udp_accept(SOCKET_T* sockfd, int* clientfd, int useAnyAddr,
|
|||||||
if (bind(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0)
|
if (bind(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0)
|
||||||
err_sys("tcp bind failed");
|
err_sys("tcp bind failed");
|
||||||
|
|
||||||
|
#if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)
|
||||||
|
if (port == 0)
|
||||||
|
{
|
||||||
|
socklen_t len = sizeof(addr);
|
||||||
|
if (getsockname(*sockfd, (struct sockaddr*)&addr, &len) == 0)
|
||||||
|
port = ntohs(addr.sin_port);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER)
|
#if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER)
|
||||||
/* signal ready to accept data */
|
/* signal ready to accept data */
|
||||||
{
|
{
|
||||||
tcp_ready* ready = args->signal;
|
tcp_ready* ready = args->signal;
|
||||||
pthread_mutex_lock(&ready->mutex);
|
pthread_mutex_lock(&ready->mutex);
|
||||||
ready->ready = 1;
|
ready->ready = 1;
|
||||||
|
ready->port = port;
|
||||||
pthread_cond_signal(&ready->cond);
|
pthread_cond_signal(&ready->cond);
|
||||||
pthread_mutex_unlock(&ready->mutex);
|
pthread_mutex_unlock(&ready->mutex);
|
||||||
}
|
}
|
||||||
@ -547,11 +566,11 @@ static INLINE void tcp_accept(SOCKET_T* sockfd, int* clientfd, func_args* args,
|
|||||||
socklen_t client_len = sizeof(client);
|
socklen_t client_len = sizeof(client);
|
||||||
|
|
||||||
if (udp) {
|
if (udp) {
|
||||||
udp_accept(sockfd, clientfd, useAnyAddr, args);
|
udp_accept(sockfd, clientfd, useAnyAddr, port, args);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tcp_listen(sockfd, port, useAnyAddr, udp);
|
tcp_listen(sockfd, &port, useAnyAddr, udp);
|
||||||
|
|
||||||
#if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER)
|
#if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER)
|
||||||
/* signal ready to tcp_accept */
|
/* signal ready to tcp_accept */
|
||||||
@ -559,6 +578,7 @@ static INLINE void tcp_accept(SOCKET_T* sockfd, int* clientfd, func_args* args,
|
|||||||
tcp_ready* ready = args->signal;
|
tcp_ready* ready = args->signal;
|
||||||
pthread_mutex_lock(&ready->mutex);
|
pthread_mutex_lock(&ready->mutex);
|
||||||
ready->ready = 1;
|
ready->ready = 1;
|
||||||
|
ready->port = port;
|
||||||
pthread_cond_signal(&ready->cond);
|
pthread_cond_signal(&ready->cond);
|
||||||
pthread_mutex_unlock(&ready->mutex);
|
pthread_mutex_unlock(&ready->mutex);
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ static void Usage(void)
|
|||||||
" NOTE: All files relative to CyaSSL home dir\n");
|
" NOTE: All files relative to CyaSSL home dir\n");
|
||||||
printf("-? Help, print this usage\n");
|
printf("-? Help, print this usage\n");
|
||||||
printf("-h <host> Host to connect to, default %s\n", yasslIP);
|
printf("-h <host> Host to connect to, default %s\n", yasslIP);
|
||||||
printf("-p <num> Port to connect on, default %d\n", yasslPort);
|
printf("-p <num> Port to connect on, not 0, default %d\n", yasslPort);
|
||||||
printf("-v <num> SSL version [0-3], SSLv3(0) - TLS1.2(3)), default %d\n",
|
printf("-v <num> SSL version [0-3], SSLv3(0) - TLS1.2(3)), default %d\n",
|
||||||
CLIENT_DEFAULT_VERSION);
|
CLIENT_DEFAULT_VERSION);
|
||||||
printf("-l <str> Cipher list\n");
|
printf("-l <str> Cipher list\n");
|
||||||
@ -206,6 +206,10 @@ void client_test(void* args)
|
|||||||
|
|
||||||
case 'p' :
|
case 'p' :
|
||||||
port = atoi(myoptarg);
|
port = atoi(myoptarg);
|
||||||
|
#if !defined(NO_MAIN_DRIVER) || defined(USE_WINDOWS_API)
|
||||||
|
if (port == 0)
|
||||||
|
err_sys("port number cannot be 0");
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'v' :
|
case 'v' :
|
||||||
|
@ -50,6 +50,7 @@ void echoclient_test(void* args)
|
|||||||
int sendSz;
|
int sendSz;
|
||||||
int argc = 0;
|
int argc = 0;
|
||||||
char** argv = 0;
|
char** argv = 0;
|
||||||
|
int port = yasslPort;
|
||||||
|
|
||||||
((func_args*)args)->return_code = -1; /* error state */
|
((func_args*)args)->return_code = -1; /* error state */
|
||||||
argc = ((func_args*)args)->argc;
|
argc = ((func_args*)args)->argc;
|
||||||
@ -79,6 +80,10 @@ void echoclient_test(void* args)
|
|||||||
doPSK = 1;
|
doPSK = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)
|
||||||
|
port = ((func_args*)args)->signal->port;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CYASSL_DTLS)
|
#if defined(CYASSL_DTLS)
|
||||||
method = DTLSv1_client_method();
|
method = DTLSv1_client_method();
|
||||||
#elif !defined(NO_TLS)
|
#elif !defined(NO_TLS)
|
||||||
@ -128,12 +133,12 @@ void echoclient_test(void* args)
|
|||||||
|
|
||||||
if (doDTLS) {
|
if (doDTLS) {
|
||||||
SOCKADDR_IN_T addr;
|
SOCKADDR_IN_T addr;
|
||||||
build_addr(&addr, yasslIP, yasslPort);
|
build_addr(&addr, yasslIP, port);
|
||||||
CyaSSL_dtls_set_peer(ssl, &addr, sizeof(addr));
|
CyaSSL_dtls_set_peer(ssl, &addr, sizeof(addr));
|
||||||
tcp_socket(&sockfd, 1);
|
tcp_socket(&sockfd, 1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tcp_connect(&sockfd, yasslIP, yasslPort, 0);
|
tcp_connect(&sockfd, yasslIP, port, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
SSL_set_fd(ssl, sockfd);
|
SSL_set_fd(ssl, sockfd);
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static void SignalReady(void* args)
|
static void SignalReady(void* args, int port)
|
||||||
{
|
{
|
||||||
#if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER)
|
#if defined(_POSIX_THREADS) && defined(NO_MAIN_DRIVER)
|
||||||
/* signal ready to tcp_accept */
|
/* signal ready to tcp_accept */
|
||||||
@ -46,10 +46,12 @@ static void SignalReady(void* args)
|
|||||||
tcp_ready* ready = server_args->signal;
|
tcp_ready* ready = server_args->signal;
|
||||||
pthread_mutex_lock(&ready->mutex);
|
pthread_mutex_lock(&ready->mutex);
|
||||||
ready->ready = 1;
|
ready->ready = 1;
|
||||||
|
ready->port = port;
|
||||||
pthread_cond_signal(&ready->cond);
|
pthread_cond_signal(&ready->cond);
|
||||||
pthread_mutex_unlock(&ready->mutex);
|
pthread_mutex_unlock(&ready->mutex);
|
||||||
#endif
|
#endif
|
||||||
(void)args;
|
(void)args;
|
||||||
|
(void)port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -64,6 +66,7 @@ THREAD_RETURN CYASSL_THREAD echoserver_test(void* args)
|
|||||||
int outCreated = 0;
|
int outCreated = 0;
|
||||||
int shutDown = 0;
|
int shutDown = 0;
|
||||||
int useAnyAddr = 0;
|
int useAnyAddr = 0;
|
||||||
|
int port = yasslPort;
|
||||||
int argc = ((func_args*)args)->argc;
|
int argc = ((func_args*)args)->argc;
|
||||||
char** argv = ((func_args*)args)->argv;
|
char** argv = ((func_args*)args)->argv;
|
||||||
|
|
||||||
@ -93,7 +96,10 @@ THREAD_RETURN CYASSL_THREAD echoserver_test(void* args)
|
|||||||
doPSK = 1;
|
doPSK = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tcp_listen(&sockfd, yasslPort, useAnyAddr, doDTLS);
|
#if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)
|
||||||
|
port = 0;
|
||||||
|
#endif
|
||||||
|
tcp_listen(&sockfd, &port, useAnyAddr, doDTLS);
|
||||||
|
|
||||||
#if defined(CYASSL_DTLS)
|
#if defined(CYASSL_DTLS)
|
||||||
method = CyaDTLSv1_server_method();
|
method = CyaDTLSv1_server_method();
|
||||||
@ -176,7 +182,7 @@ THREAD_RETURN CYASSL_THREAD echoserver_test(void* args)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
SignalReady(args);
|
SignalReady(args, port);
|
||||||
|
|
||||||
while (!shutDown) {
|
while (!shutDown) {
|
||||||
CYASSL* ssl = 0;
|
CYASSL* ssl = 0;
|
||||||
@ -279,8 +285,8 @@ THREAD_RETURN CYASSL_THREAD echoserver_test(void* args)
|
|||||||
CyaSSL_free(ssl);
|
CyaSSL_free(ssl);
|
||||||
CloseSocket(clientfd);
|
CloseSocket(clientfd);
|
||||||
#ifdef CYASSL_DTLS
|
#ifdef CYASSL_DTLS
|
||||||
tcp_listen(&sockfd, yasslPort, useAnyAddr, doDTLS);
|
tcp_listen(&sockfd, &port, useAnyAddr, doDTLS);
|
||||||
SignalReady(args);
|
SignalReady(args, port);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ static void Usage(void)
|
|||||||
printf("server " LIBCYASSL_VERSION_STRING
|
printf("server " LIBCYASSL_VERSION_STRING
|
||||||
" NOTE: All files relative to CyaSSL home dir\n");
|
" NOTE: All files relative to CyaSSL home dir\n");
|
||||||
printf("-? Help, print this usage\n");
|
printf("-? Help, print this usage\n");
|
||||||
printf("-p <num> Port to listen on, default %d\n", yasslPort);
|
printf("-p <num> Port to listen on, not 0, default %d\n", yasslPort);
|
||||||
printf("-v <num> SSL version [0-3], SSLv3(0) - TLS1.2(3)), default %d\n",
|
printf("-v <num> SSL version [0-3], SSLv3(0) - TLS1.2(3)), default %d\n",
|
||||||
SERVER_DEFAULT_VERSION);
|
SERVER_DEFAULT_VERSION);
|
||||||
printf("-l <str> Cipher list\n");
|
printf("-l <str> Cipher list\n");
|
||||||
@ -182,6 +182,10 @@ THREAD_RETURN CYASSL_THREAD server_test(void* args)
|
|||||||
|
|
||||||
case 'p' :
|
case 'p' :
|
||||||
port = atoi(myoptarg);
|
port = atoi(myoptarg);
|
||||||
|
#if !defined(NO_MAIN_DRIVER) || defined(USE_WINDOWS_API)
|
||||||
|
if (port == 0)
|
||||||
|
err_sys("port number cannot be 0");
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'v' :
|
case 'v' :
|
||||||
|
@ -43,7 +43,9 @@
|
|||||||
CYASSL_CTX* cipherSuiteCtx = NULL;
|
CYASSL_CTX* cipherSuiteCtx = NULL;
|
||||||
char nonblockFlag[] = "-N";
|
char nonblockFlag[] = "-N";
|
||||||
char noVerifyFlag[] = "-d";
|
char noVerifyFlag[] = "-d";
|
||||||
|
char portFlag[] = "-p";
|
||||||
char flagSep[] = " ";
|
char flagSep[] = " ";
|
||||||
|
char svrPort[] = "0";
|
||||||
|
|
||||||
|
|
||||||
#ifdef NO_OLD_TLS
|
#ifdef NO_OLD_TLS
|
||||||
@ -156,11 +158,10 @@ static int execute_test_case(int svr_argc, char** svr_argv,
|
|||||||
if (addNoVerify) {
|
if (addNoVerify) {
|
||||||
printf("repeating test with client cert request off\n");
|
printf("repeating test with client cert request off\n");
|
||||||
added += 4; /* -d plus space plus terminator */
|
added += 4; /* -d plus space plus terminator */
|
||||||
if (added >= MAX_COMMAND_SZ)
|
if (added >= MAX_COMMAND_SZ || svr_argc >= MAX_ARGS)
|
||||||
printf("server command line too long\n");
|
printf("server command line too long\n");
|
||||||
else {
|
else {
|
||||||
svr_argv[svr_argc] = noVerifyFlag;
|
svr_argv[svr_argc++] = noVerifyFlag;
|
||||||
svr_argc++;
|
|
||||||
svrArgs.argc = svr_argc;
|
svrArgs.argc = svr_argc;
|
||||||
strcat(commandLine, noVerifyFlag);
|
strcat(commandLine, noVerifyFlag);
|
||||||
strcat(commandLine, flagSep);
|
strcat(commandLine, flagSep);
|
||||||
@ -169,16 +170,26 @@ static int execute_test_case(int svr_argc, char** svr_argv,
|
|||||||
if (addNonBlocking) {
|
if (addNonBlocking) {
|
||||||
printf("repeating test with non blocking on\n");
|
printf("repeating test with non blocking on\n");
|
||||||
added += 4; /* -N plus terminator */
|
added += 4; /* -N plus terminator */
|
||||||
if (added >= MAX_COMMAND_SZ)
|
if (added >= MAX_COMMAND_SZ || svr_argc >= MAX_ARGS)
|
||||||
printf("server command line too long\n");
|
printf("server command line too long\n");
|
||||||
else {
|
else {
|
||||||
svr_argv[svr_argc] = nonblockFlag;
|
svr_argv[svr_argc++] = nonblockFlag;
|
||||||
svr_argc++;
|
|
||||||
svrArgs.argc = svr_argc;
|
svrArgs.argc = svr_argc;
|
||||||
strcat(commandLine, nonblockFlag);
|
strcat(commandLine, nonblockFlag);
|
||||||
strcat(commandLine, flagSep);
|
strcat(commandLine, flagSep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifndef USE_WINDOWS_API
|
||||||
|
/* add port 0 */
|
||||||
|
if (svr_argc + 2 > MAX_ARGS)
|
||||||
|
printf("cannot add the magic port number flag to server\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
svr_argv[svr_argc++] = portFlag;
|
||||||
|
svr_argv[svr_argc++] = svrPort;
|
||||||
|
svrArgs.argc = svr_argc;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
printf("trying server command line[%d]: %s\n", tests, commandLine);
|
printf("trying server command line[%d]: %s\n", tests, commandLine);
|
||||||
|
|
||||||
commandLine[0] = '\0';
|
commandLine[0] = '\0';
|
||||||
@ -197,11 +208,10 @@ static int execute_test_case(int svr_argc, char** svr_argv,
|
|||||||
if (added >= MAX_COMMAND_SZ)
|
if (added >= MAX_COMMAND_SZ)
|
||||||
printf("client command line too long\n");
|
printf("client command line too long\n");
|
||||||
else {
|
else {
|
||||||
cli_argv[cli_argc] = nonblockFlag;
|
cli_argv[cli_argc++] = nonblockFlag;
|
||||||
cli_argc++;
|
|
||||||
cliArgs.argc = cli_argc;
|
|
||||||
strcat(commandLine, nonblockFlag);
|
strcat(commandLine, nonblockFlag);
|
||||||
strcat(commandLine, flagSep);
|
strcat(commandLine, flagSep);
|
||||||
|
cliArgs.argc = cli_argc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("trying client command line[%d]: %s\n", tests++, commandLine);
|
printf("trying client command line[%d]: %s\n", tests++, commandLine);
|
||||||
@ -212,7 +222,20 @@ static int execute_test_case(int svr_argc, char** svr_argv,
|
|||||||
svrArgs.signal = &ready;
|
svrArgs.signal = &ready;
|
||||||
start_thread(server_test, &svrArgs, &serverThread);
|
start_thread(server_test, &svrArgs, &serverThread);
|
||||||
wait_tcp_ready(&svrArgs);
|
wait_tcp_ready(&svrArgs);
|
||||||
|
#ifndef USE_WINDOWS_API
|
||||||
|
if (ready.port != 0)
|
||||||
|
{
|
||||||
|
if (cli_argc + 2 > MAX_ARGS)
|
||||||
|
printf("cannot add the magic port number flag to client\n");
|
||||||
|
else {
|
||||||
|
char portNumber[8];
|
||||||
|
snprintf(portNumber, sizeof(portNumber), "%d", ready.port);
|
||||||
|
cli_argv[cli_argc++] = portFlag;
|
||||||
|
cli_argv[cli_argc++] = portNumber;
|
||||||
|
cliArgs.argc = cli_argc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/* start client */
|
/* start client */
|
||||||
client_test(&cliArgs);
|
client_test(&cliArgs);
|
||||||
|
|
||||||
|
@ -94,6 +94,7 @@ void join_thread(THREAD_TYPE thread)
|
|||||||
void InitTcpReady(tcp_ready* ready)
|
void InitTcpReady(tcp_ready* ready)
|
||||||
{
|
{
|
||||||
ready->ready = 0;
|
ready->ready = 0;
|
||||||
|
ready->port = 0;
|
||||||
#ifdef _POSIX_THREADS
|
#ifdef _POSIX_THREADS
|
||||||
pthread_mutex_init(&ready->mutex, 0);
|
pthread_mutex_init(&ready->mutex, 0);
|
||||||
pthread_cond_init(&ready->cond, 0);
|
pthread_cond_init(&ready->cond, 0);
|
||||||
|
@ -43,6 +43,8 @@ void client_test(void*);
|
|||||||
|
|
||||||
void file_test(const char* file, byte* hash);
|
void file_test(const char* file, byte* hash);
|
||||||
|
|
||||||
|
void simple_test(func_args*);
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
NUMARGS = 3
|
NUMARGS = 3
|
||||||
};
|
};
|
||||||
@ -54,7 +56,6 @@ char* myoptarg = NULL;
|
|||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
func_args args;
|
|
||||||
func_args server_args;
|
func_args server_args;
|
||||||
|
|
||||||
tcp_ready ready;
|
tcp_ready ready;
|
||||||
@ -68,8 +69,8 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
StartTCP();
|
StartTCP();
|
||||||
|
|
||||||
args.argc = server_args.argc = argc;
|
server_args.argc = argc;
|
||||||
args.argv = server_args.argv = argv;
|
server_args.argv = argv;
|
||||||
|
|
||||||
CyaSSL_Init();
|
CyaSSL_Init();
|
||||||
#if defined(DEBUG_CYASSL) && !defined(HAVE_VALGRIND)
|
#if defined(DEBUG_CYASSL) && !defined(HAVE_VALGRIND)
|
||||||
@ -81,19 +82,15 @@ int main(int argc, char** argv)
|
|||||||
else if (CurrentDir("build")) /* Xcode->Preferences->Locations->Build */
|
else if (CurrentDir("build")) /* Xcode->Preferences->Locations->Build */
|
||||||
ChangeDirBack(2); /* Location "Place build product in locations
|
ChangeDirBack(2); /* Location "Place build product in locations
|
||||||
specified by targets", uses build/Debug */
|
specified by targets", uses build/Debug */
|
||||||
|
server_args.signal = &ready;
|
||||||
|
InitTcpReady(&ready);
|
||||||
|
|
||||||
/* CTaoCrypt test */
|
/* CTaoCrypt test */
|
||||||
ctaocrypt_test(&args);
|
ctaocrypt_test(&server_args);
|
||||||
if (args.return_code != 0) return args.return_code;
|
if (server_args.return_code != 0) return server_args.return_code;
|
||||||
|
|
||||||
/* Simple CyaSSL client server test */
|
/* Simple CyaSSL client server test */
|
||||||
InitTcpReady(&ready);
|
simple_test(&server_args);
|
||||||
server_args.signal = &ready;
|
|
||||||
start_thread(server_test, &server_args, &serverThread);
|
|
||||||
wait_tcp_ready(&server_args);
|
|
||||||
|
|
||||||
client_test(&args);
|
|
||||||
if (args.return_code != 0) return args.return_code;
|
|
||||||
join_thread(serverThread);
|
|
||||||
if (server_args.return_code != 0) return server_args.return_code;
|
if (server_args.return_code != 0) return server_args.return_code;
|
||||||
|
|
||||||
/* Echo input yaSSL client server test */
|
/* Echo input yaSSL client server test */
|
||||||
@ -119,6 +116,9 @@ int main(int argc, char** argv)
|
|||||||
strcpy(echo_args.argv[2], "output");
|
strcpy(echo_args.argv[2], "output");
|
||||||
remove("output");
|
remove("output");
|
||||||
|
|
||||||
|
/* Share the signal, it has the new port number in it. */
|
||||||
|
echo_args.signal = server_args.signal;
|
||||||
|
|
||||||
/* make sure OK */
|
/* make sure OK */
|
||||||
echoclient_test(&echo_args);
|
echoclient_test(&echo_args);
|
||||||
if (echo_args.return_code != 0) return echo_args.return_code;
|
if (echo_args.return_code != 0) return echo_args.return_code;
|
||||||
@ -157,6 +157,65 @@ int main(int argc, char** argv)
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void simple_test(func_args* args)
|
||||||
|
{
|
||||||
|
THREAD_TYPE serverThread;
|
||||||
|
|
||||||
|
func_args svrArgs;
|
||||||
|
char *svrArgv[NUMARGS];
|
||||||
|
char argc0s[32];
|
||||||
|
char argc1s[32];
|
||||||
|
char argc2s[32];
|
||||||
|
|
||||||
|
func_args cliArgs;
|
||||||
|
char *cliArgv[NUMARGS];
|
||||||
|
char argc0c[32];
|
||||||
|
char argc1c[32];
|
||||||
|
char argc2c[32];
|
||||||
|
|
||||||
|
svrArgv[0] = argc0s;
|
||||||
|
svrArgv[1] = argc1s;
|
||||||
|
svrArgv[2] = argc2s;
|
||||||
|
cliArgv[0] = argc0c;
|
||||||
|
cliArgv[1] = argc1c;
|
||||||
|
cliArgv[2] = argc2c;
|
||||||
|
|
||||||
|
svrArgs.argc = 1;
|
||||||
|
svrArgs.argv = svrArgv;
|
||||||
|
svrArgs.return_code = 0;
|
||||||
|
cliArgs.argc = 1;
|
||||||
|
cliArgs.argv = cliArgv;
|
||||||
|
cliArgs.return_code = 0;
|
||||||
|
|
||||||
|
strcpy(svrArgs.argv[0], "SimpleServer");
|
||||||
|
#ifndef USE_WINDOWS_API
|
||||||
|
svrArgs.argc = NUMARGS;
|
||||||
|
strcpy(svrArgs.argv[1], "-p");
|
||||||
|
strcpy(svrArgs.argv[2], "0");
|
||||||
|
#endif
|
||||||
|
/* Set the last arg later, when it is known. */
|
||||||
|
|
||||||
|
args->return_code = 0;
|
||||||
|
svrArgs.signal = args->signal;
|
||||||
|
start_thread(server_test, &svrArgs, &serverThread);
|
||||||
|
wait_tcp_ready(&svrArgs);
|
||||||
|
|
||||||
|
/* Setting the actual port number. */
|
||||||
|
strcpy(cliArgs.argv[0], "SimpleClient");
|
||||||
|
#ifndef USE_WINDOWS_API
|
||||||
|
cliArgs.argc = NUMARGS;
|
||||||
|
strcpy(cliArgs.argv[1], "-p");
|
||||||
|
snprintf(cliArgs.argv[2], sizeof(argc2c), "%d", svrArgs.signal->port);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
client_test(&cliArgs);
|
||||||
|
if (cliArgs.return_code != 0) {
|
||||||
|
args->return_code = cliArgs.return_code;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
join_thread(serverThread);
|
||||||
|
if (svrArgs.return_code != 0) args->return_code = svrArgs.return_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void wait_tcp_ready(func_args* args)
|
void wait_tcp_ready(func_args* args)
|
||||||
@ -200,6 +259,7 @@ void join_thread(THREAD_TYPE thread)
|
|||||||
void InitTcpReady(tcp_ready* ready)
|
void InitTcpReady(tcp_ready* ready)
|
||||||
{
|
{
|
||||||
ready->ready = 0;
|
ready->ready = 0;
|
||||||
|
ready->port = 0;
|
||||||
#ifdef _POSIX_THREADS
|
#ifdef _POSIX_THREADS
|
||||||
pthread_mutex_init(&ready->mutex, 0);
|
pthread_mutex_init(&ready->mutex, 0);
|
||||||
pthread_cond_init(&ready->cond, 0);
|
pthread_cond_init(&ready->cond, 0);
|
||||||
|
Reference in New Issue
Block a user