int tlsio_wolfssl_setoption()

in adapters/tlsio_wolfssl.c [967:1063]


int tlsio_wolfssl_setoption(CONCRETE_IO_HANDLE tls_io, const char* optionName, const void* value)
{
    int result;

    if (tls_io == NULL || optionName == NULL)
    {
        LogError("Bad arguments, tls_io = %p, optionName = %p", tls_io, optionName);
        result = MU_FAILURE;
    }
    else
    {
        TLS_IO_INSTANCE* tls_io_instance = (TLS_IO_INSTANCE*)tls_io;

        if (strcmp(OPTION_TRUSTED_CERT, optionName) == 0)
        {
            result  = process_option(&tls_io_instance->certificate, optionName, value);
        }
        else if (strcmp(SU_OPTION_X509_CERT, optionName) == 0 || strcmp(OPTION_X509_ECC_CERT, optionName) == 0)
        {
            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)
        {
            result = process_option(&tls_io_instance->x509privatekey, optionName, value);
        }
        else if (strcmp(optionName, OPTION_SET_TLS_RENEGOTIATION) == 0)
        {
            // No need to do anything for WolfSSL
            result = 0;
        }
#ifdef INVALID_DEVID
        else if (strcmp(OPTION_WOLFSSL_SET_DEVICE_ID, optionName) == 0)
        {
            int device_id = *((int *)value);
            if (tls_io_instance->ssl != NULL && wolfSSL_SetDevId(tls_io_instance->ssl, device_id) != WOLFSSL_SUCCESS)
            {
                LogError("Failure setting device id on ssl");
                result = MU_FAILURE;
            }
            else
            {
                // Save the device Id even if ssl object not yet created.
                tls_io_instance->wolfssl_device_id = device_id;
                result = 0;
            }
        }
#endif
        else if (strcmp("ignore_host_name_check", optionName) == 0)
        {
            bool* server_name_check = (bool*)value;
            tls_io_instance->ignore_host_name_check = *server_name_check;
            result = 0;
        }
#if defined(LIBWOLFSSL_VERSION_HEX) && LIBWOLFSSL_VERSION_HEX >= 0x04000000
        else if (strcmp("debug_log", optionName) == 0)
        {
            bool* enable_debug_logging = (bool*)value;
            if (enable_debug_logging)
            {
                if (!wolfSSL_Debugging_ON())
                {
                    LogError("wolfSSL_Debugging_ON failed.");
                    result = MU_FAILURE;
                }
                else if (!wolfSSL_SetLoggingCb(&logging_callback))
                {
                    LogError("wolfSSL_SetLoggingCb failed.");
                    result = MU_FAILURE;
                }
                else
                {
                    result = 0;
                }
            }
            else
            {
                LogError("tlsio WolfSSL layer does not support disabling debug_logs after they have been enabled.");
                result = MU_FAILURE;
            }
        }
#endif // LIBWOLFSSL_VERSION_HEX >= 0x04000000
        else
        {
            if (tls_io_instance->socket_io == NULL)
            {
                LogError("NULL underlying IO handle");
                result = MU_FAILURE;
            }
            else
            {
                result = xio_setoption(tls_io_instance->socket_io, optionName, value);
            }
        }
    }

    return result;
}