Azure IoT common library
Dependents: STM32F746_iothub_client_sample_mqtt f767zi_mqtt iothub_client_sample_amqp iothub_client_sample_http ... more
Diff: tlsio_wolfssl.c
- Revision:
- 39:05674f3c9d9d
- Parent:
- 38:ed9c888e5e12
- Child:
- 40:3f3af6cd8a01
diff -r ed9c888e5e12 -r 05674f3c9d9d tlsio_wolfssl.c --- a/tlsio_wolfssl.c Wed Jan 17 08:58:29 2018 -0800 +++ b/tlsio_wolfssl.c Tue Jan 30 08:23:35 2018 -0800 @@ -2,11 +2,14 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. #include <stdlib.h> +#define WOLFSSL_OPTIONS_IGNORE_SYS +#include "wolfssl/options.h" #include "wolfssl/ssl.h" #include "wolfssl/error-ssl.h" #include <stdio.h> #include <stdbool.h> #include <string.h> +#include "azure_c_shared_utility/gballoc.h" #include "azure_c_shared_utility/tlsio.h" #include "azure_c_shared_utility/tlsio_wolfssl.h" #include "azure_c_shared_utility/socketio.h" @@ -369,7 +372,7 @@ { result = WOLFSSL_CBIO_ERR_WANT_READ; } - else if ((result == 0) && tls_io_instance->tlsio_state == TLSIO_STATE_CLOSING) + else if ((result == 0) && (tls_io_instance->tlsio_state == TLSIO_STATE_CLOSING || tls_io_instance->tlsio_state == TLSIO_STATE_NOT_OPEN)) { result = WOLFSSL_CBIO_ERR_CONN_CLOSE; } @@ -469,6 +472,7 @@ static void destroy_wolfssl_instance(TLS_IO_INSTANCE* tls_io_instance) { wolfSSL_free(tls_io_instance->ssl); + tls_io_instance->ssl = NULL; } static int create_wolfssl_instance(TLS_IO_INSTANCE* tls_io_instance) @@ -638,22 +642,27 @@ if (tls_io_instance->socket_io_read_bytes != NULL) { free(tls_io_instance->socket_io_read_bytes); + tls_io_instance->socket_io_read_bytes = NULL; } - if (tls_io_instance->certificate != NULL) { free(tls_io_instance->certificate); + tls_io_instance->certificate = NULL; } if (tls_io_instance->x509certificate != NULL) { free(tls_io_instance->x509certificate); + tls_io_instance->x509certificate = NULL; } if (tls_io_instance->x509privatekey != NULL) { free(tls_io_instance->x509privatekey); + tls_io_instance->x509privatekey = NULL; } wolfSSL_CTX_free(tls_io_instance->ssl_context); + tls_io_instance->ssl_context = NULL; + xio_destroy(tls_io_instance->socket_io); free(tls_io); } @@ -766,9 +775,9 @@ { int result; - if (tls_io == NULL) + if (tls_io == NULL || buffer == NULL || size == 0) { - LogError("NULL tls_io handle"); + LogError("Invalid parameter specified tls_io: %p, buffer: %p, size: %d", tls_io, buffer, size); result = __FAILURE__; } else @@ -866,7 +875,7 @@ { result = process_option(&tls_io_instance->x509certificate, optionName, value); } - else if (strcmp(SU_OPTION_X509_PRIVATE_KEY, optionName) == 0 | strcmp(OPTION_X509_ECC_KEY, optionName) == 0) + else if (strcmp(SU_OPTION_X509_PRIVATE_KEY, optionName) == 0 || strcmp(OPTION_X509_ECC_KEY, optionName) == 0) { result = process_option(&tls_io_instance->x509privatekey, optionName, value); }