3
#include "../../testsuite/test.hpp"
8
void ClientError(SSL_CTX* ctx, SSL* ssl, SOCKET_T& sockfd, const char* msg)
18
void NonBlockingSSL_Connect(SSL* ssl, SSL_CTX* ctx, SOCKET_T& sockfd)
20
int ret = SSL_connect(ssl);
21
while (ret =! SSL_SUCCESS && SSL_get_error(ssl, 0) ==
22
SSL_ERROR_WANT_READ) {
23
printf("... client would block\n");
29
ret = SSL_connect(ssl);
31
if (ret != SSL_SUCCESS)
32
ClientError(ctx, ssl, sockfd, "SSL_connect failed");
37
void client_test(void* args)
41
WSAStartup(0x0002, &wsd);
48
set_args(argc, argv, *static_cast<func_args*>(args));
51
tcp_set_nonblocking(sockfd);
54
SSL_METHOD* method = TLSv1_client_method();
55
SSL_CTX* ctx = SSL_CTX_new(method);
58
SSL* ssl = SSL_new(ctx);
60
SSL_set_fd(ssl, sockfd);
64
NonBlockingSSL_Connect(ssl, ctx, sockfd);
66
if (SSL_connect(ssl) != SSL_SUCCESS)
67
ClientError(ctx, ssl, sockfd, "SSL_connect failed");
71
const char* cipher = 0;
74
strncpy(list, "cipherlist", 11);
75
while ( (cipher = SSL_get_cipher_list(ssl, index++)) ) {
76
strncat(list, ":", 2);
77
strncat(list, cipher, strlen(cipher) + 1);
80
printf("Using Cipher Suite: %s\n", SSL_get_cipher(ssl));
82
char msg[] = "hello yassl!";
83
if (SSL_write(ssl, msg, sizeof(msg)) != sizeof(msg))
84
ClientError(ctx, ssl, sockfd, "SSL_write failed");
87
int input = SSL_read(ssl, reply, sizeof(reply));
90
printf("Server response: %s\n", reply);
94
SSL_SESSION* session = SSL_get_session(ssl);
95
SSL* sslResume = SSL_new(ctx);
104
SSL_set_fd(sslResume, sockfd);
105
SSL_set_session(sslResume, session);
107
if (SSL_connect(sslResume) != SSL_SUCCESS)
108
ClientError(ctx, sslResume, sockfd, "SSL_resume failed");
111
if (SSL_write(sslResume, msg, sizeof(msg)) != sizeof(msg))
112
ClientError(ctx, sslResume, sockfd, "SSL_write failed");
114
input = SSL_read(sslResume, reply, sizeof(reply));
117
printf("Server response: %s\n", reply);
120
SSL_shutdown(sslResume);
123
#endif // TEST_RESUME
126
((func_args*)args)->return_code = 0;
130
#ifndef NO_MAIN_DRIVER
132
int main(int argc, char** argv)
142
return args.return_code;
145
#endif // NO_MAIN_DRIVER