From ca730b905d548ce7dfbcc982457318847382ba08 Mon Sep 17 00:00:00 2001 From: abrahamsonn Date: Fri, 2 Jun 2017 10:46:01 -0600 Subject: [PATCH] Updated client-dtls-resume.c 1. Moved functionality to main 2. Converted hard-tab characters to 4 spaces each to fix indentation problems 3. Added comments --- dtls/client-dtls-resume.c | 109 ++++++++++++++++++++++++++++++++------ 1 file changed, 92 insertions(+), 17 deletions(-) diff --git a/dtls/client-dtls-resume.c b/dtls/client-dtls-resume.c index 4b25c4e8..cb0648dc 100644 --- a/dtls/client-dtls-resume.c +++ b/dtls/client-dtls-resume.c @@ -67,22 +67,25 @@ void DatagramClient (WOLFSSL* ssl) int main (int argc, char** argv) { - int sockfd = 0; - struct sockaddr_in servAddr; - const char* host = argv[1]; - WOLFSSL* ssl = 0; - WOLFSSL_CTX* ctx = 0; - WOLFSSL* sslResume = 0; - WOLFSSL_SESSION* session = 0; - char* srTest = "testing session resume"; - char cert_array[] = "../certs/ca-cert.pem"; - char* certs = cert_array; + int sockfd = 0; + struct sockaddr_in servAddr; + const char* host = argv[1]; + WOLFSSL* ssl = 0; + WOLFSSL_CTX* ctx = 0; + WOLFSSL* sslResume = 0; + WOLFSSL_SESSION* session = 0; + char* srTest = "testing session resume"; + char cert_array[] = "../certs/ca-cert.pem"; + char* certs = cert_array; + if (argc != 2) { printf("usage: udpcli \n"); return 1; } wolfSSL_Init(); + + /* Un-comment the following line to enable debugging */ /* wolfSSL_Debugging_ON(); */ if ( (ctx = wolfSSL_CTX_new(wolfDTLSv1_2_client_method())) == NULL) { @@ -118,22 +121,56 @@ int main (int argc, char** argv) wolfSSL_set_fd(ssl, sockfd); if (wolfSSL_connect(ssl) != SSL_SUCCESS) { - int err1 = wolfSSL_get_error(ssl, 0); - char buffer[80]; - printf("err = %d, %s\n", err1, wolfSSL_ERR_error_string(err1, buffer)); - printf("SSL_connect failed"); + int err1 = wolfSSL_get_error(ssl, 0); + char buffer[80]; + printf("err = %d, %s\n", err1, wolfSSL_ERR_error_string(err1, buffer)); + printf("SSL_connect failed"); return 1; } - DatagramClient(ssl); +/*****************************************************************************/ +/* Code for sending datagram to server */ + int recvlen; + char sendLine[MAXLINE]; + char recvLine[MAXLINE - 1]; + + /* Loop while the user gives input or until an EOF is read */ + while( fgets(sendLine, MAXLINE, stdin) != NULL ) { + + /* Attempt to send sendLine to the server */ + if ( ( wolfSSL_write(ssl, sendLine, strlen(sendLine))) != + strlen(sendLine) ) { + printf("Error: wolfSSL_write failed.\n"); + } + + /* Attempt to read a message from server and store it in recvLine */ + recvlen = wolfSSL_read(ssl, recvLine, sizeof(recvLine) - 1); + + /* Error checking wolfSSL_read */ + if (recvlen < 0) { + int readErr = wolfSSL_get_error(ssl, 0); + if (readErr != SSL_ERROR_WANT_READ) { + printf("Error: wolfSSL_read failed.\n"); + } + } + + recvLine[recvlen] = '\0'; + fputs(recvLine, stdout); + } +/* */ +/*****************************************************************************/ + + /* Keep track of the old session information */ wolfSSL_write(ssl, srTest, sizeof(srTest)); session = wolfSSL_get_session(ssl); sslResume = wolfSSL_new(ctx); + /* Cleanup the memory used by the old session & ssl object */ wolfSSL_shutdown(ssl); wolfSSL_free(ssl); close(sockfd); + /* Perform setup with new variables/old session information */ memset(&servAddr, 0, sizeof(servAddr)); servAddr.sin_family = AF_INET; servAddr.sin_port = htons(SERV_PORT); @@ -150,10 +187,17 @@ int main (int argc, char** argv) } wolfSSL_set_fd(sslResume, sockfd); + + /* New method call - specifies to the WOLFSSL object to use the * + * given WOLFSSL_SESSION object */ wolfSSL_set_session(sslResume, session); + wolfSSL_set_fd(sslResume, sockfd); if (wolfSSL_connect(sslResume) != SSL_SUCCESS) { - printf("SSL_connect failed"); + int err1 = wolfSSL_get_error(sslResume, 0); + char buffer[80]; + printf("err = %d, %s\n", err1, wolfSSL_ERR_error_string(err1, buffer)); + printf("SSL_connect failed on session reuse\n"); return 1; } @@ -164,10 +208,41 @@ int main (int argc, char** argv) printf("didn't reuse session id!!!\n"); } - DatagramClient(sslResume); +/*****************************************************************************/ +/* Code for sending datagram to server */ + int recvlen; + char sendLine[MAXLINE]; + char recvLine[MAXLINE - 1]; + + /* Loop while the user gives input or until an EOF is read */ + while( fgets(sendLine, MAXLINE, stdin) != NULL ) { + + /* Attempt to send sendLine to the server */ + if ( ( wolfSSL_write(ssl, sendLine, strlen(sendLine))) != + strlen(sendLine) ) { + printf("Error: wolfSSL_write failed.\n"); + } + + /* Attempt to read a message from server and store it in recvLine */ + recvlen = wolfSSL_read(ssl, recvLine, sizeof(recvLine) - 1); + + /* Error checking wolfSSL_read */ + if (recvlen < 0) { + int readErr = wolfSSL_get_error(ssl, 0); + if (readErr != SSL_ERROR_WANT_READ) { + printf("Error: wolfSSL_read failed.\n"); + } + } + + recvLine[recvlen] = '\0'; + fputs(recvLine, stdout); + } +/* */ +/*****************************************************************************/ wolfSSL_write(sslResume, srTest, sizeof(srTest)); + /* Cleanup memory used for storing the session information */ wolfSSL_shutdown(sslResume); wolfSSL_free(sslResume);