Azure IoT common library
Fork of azure_c_shared_utility by
Diff: tlsio_wolfssl.c
- Revision:
- 22:10640b226104
- Parent:
- 21:b92006c5b9ff
- Child:
- 30:ce3813c5a692
--- a/tlsio_wolfssl.c Fri Feb 24 14:01:41 2017 -0800 +++ b/tlsio_wolfssl.c Fri Mar 10 11:48:28 2017 -0800 @@ -15,7 +15,6 @@ #include "azure_c_shared_utility/xlogging.h" #include "azure_c_shared_utility/shared_util_options.h" - typedef enum TLSIO_STATE_ENUM_TAG { TLSIO_STATE_NOT_OPEN, @@ -47,8 +46,6 @@ char* certificate; char* x509certificate; char* x509privatekey; - char* hostname; - int port; } TLS_IO_INSTANCE; /*this function will clone an option given by name and value*/ @@ -548,77 +545,83 @@ TLSIO_CONFIG* tls_io_config = io_create_parameters; result = (TLS_IO_INSTANCE*)malloc(sizeof(TLS_IO_INSTANCE)); - if (result != NULL) + if (result == NULL) + { + LogError("Failed allocating memory for the TLS IO instance."); + } + else { - memset(result, 0, sizeof(TLS_IO_INSTANCE)); - if (mallocAndStrcpy_s(&result->hostname, tls_io_config->hostname) != 0) + (void)memset(result, 0, sizeof(TLS_IO_INSTANCE)); + + result->socket_io_read_bytes = 0; + result->socket_io_read_byte_count = 0; + result->socket_io = NULL; + + result->ssl = NULL; + result->certificate = NULL; + result->x509certificate = NULL; + result->x509privatekey = NULL; + + result->on_bytes_received = NULL; + result->on_bytes_received_context = NULL; + + result->on_io_open_complete = NULL; + result->on_io_open_complete_context = NULL; + + result->on_io_close_complete = NULL; + result->on_io_close_complete_context = NULL; + + result->on_io_error = NULL; + result->on_io_error_context = NULL; + + result->tlsio_state = TLSIO_STATE_NOT_OPEN; + + result->ssl_context = wolfSSL_CTX_new(wolfTLSv1_2_client_method()); + if (result->ssl_context == NULL) { - LogError("Cannot copy the hostname"); + LogError("Cannot create the wolfSSL context"); free(result); result = NULL; } else { - result->port = tls_io_config->port; - - result->socket_io_read_bytes = 0; - result->socket_io_read_byte_count = 0; - result->socket_io = NULL; + const IO_INTERFACE_DESCRIPTION* underlying_io_interface; + void* io_interface_parameters; - result->ssl = NULL; - result->certificate = NULL; - result->x509certificate = NULL; - result->x509privatekey = NULL; - - result->on_bytes_received = NULL; - result->on_bytes_received_context = NULL; + if (tls_io_config->underlying_io_interface != NULL) + { + underlying_io_interface = tls_io_config->underlying_io_interface; + io_interface_parameters = tls_io_config->underlying_io_parameters; + } + else + { + SOCKETIO_CONFIG socketio_config; - result->on_io_open_complete = NULL; - result->on_io_open_complete_context = NULL; - - result->on_io_close_complete = NULL; - result->on_io_close_complete_context = NULL; + socketio_config.hostname = tls_io_config->hostname; + socketio_config.port = tls_io_config->port; + socketio_config.accepted_socket = NULL; - result->on_io_error = NULL; - result->on_io_error_context = NULL; - - result->tlsio_state = TLSIO_STATE_NOT_OPEN; + underlying_io_interface = socketio_get_interface_description(); + io_interface_parameters = &socketio_config; + } - result->ssl_context = wolfSSL_CTX_new(wolfTLSv1_client_method()); - if (result->ssl_context == NULL) + if (underlying_io_interface == NULL) { - LogError("Cannot create the wolfSSL context"); - free(result->hostname); + LogError("Failed getting socket IO interface description."); + wolfSSL_CTX_free(result->ssl_context); free(result); result = NULL; } else { - const IO_INTERFACE_DESCRIPTION* socket_io_interface = socketio_get_interface_description(); - if (socket_io_interface == NULL) + result->socket_io = xio_create(underlying_io_interface, io_interface_parameters); + if (result->socket_io == NULL) { + LogError("Failure connecting to underlying socket_io"); wolfSSL_CTX_free(result->ssl_context); - free(result->hostname); free(result); result = NULL; } - else - { - SOCKETIO_CONFIG socketio_config; - socketio_config.hostname = result->hostname; - socketio_config.port = result->port; - socketio_config.accepted_socket = NULL; - - result->socket_io = xio_create(socket_io_interface, &socketio_config); - if (result->socket_io == NULL) - { - LogError("Failure connecting to underlying socket_io"); - wolfSSL_CTX_free(result->ssl_context); - free(result->hostname); - free(result); - result = NULL; - } - } } } } @@ -649,10 +652,6 @@ { free(tls_io_instance->x509privatekey); } - if (tls_io_instance->hostname != NULL) - { - free(tls_io_instance->hostname); - } wolfSSL_CTX_free(tls_io_instance->ssl_context); xio_destroy(tls_io_instance->socket_io);