in provisioning_client/src/prov_device_ll_client.c [1212:1361]
PROV_DEVICE_RESULT Prov_Device_LL_SetOption(PROV_DEVICE_LL_HANDLE handle, const char* option_name, const void* value)
{
PROV_DEVICE_RESULT result;
if (handle == NULL || option_name == NULL)
{
LogError("Invalid parameter specified handle: %p option_name: %p", handle, option_name);
result = PROV_DEVICE_RESULT_INVALID_ARG;
}
else
{
if (strcmp(option_name, OPTION_TRUSTED_CERT) == 0)
{
const char* cert_info = (const char*)value;
if (handle->prov_transport_protocol->prov_transport_trusted_cert(handle->transport_handle, cert_info) != 0)
{
result = PROV_DEVICE_RESULT_ERROR;
LogError("failure allocating certificate");
}
else
{
result = PROV_DEVICE_RESULT_OK;
}
}
else if (strcmp(PROV_OPTION_LOG_TRACE, option_name) == 0)
{
bool log_trace = *((bool*)value);
if (handle->prov_transport_protocol->prov_transport_set_trace(handle->transport_handle, log_trace) != 0)
{
result = PROV_DEVICE_RESULT_ERROR;
LogError("failure setting trace option");
}
else
{
result = PROV_DEVICE_RESULT_OK;
}
}
else if (strcmp(OPTION_HTTP_PROXY, option_name) == 0)
{
HTTP_PROXY_OPTIONS* proxy_options = (HTTP_PROXY_OPTIONS*)value;
if (handle->prov_transport_protocol->prov_transport_set_proxy(handle->transport_handle, proxy_options) != 0)
{
LogError("setting proxy options");
result = PROV_DEVICE_RESULT_ERROR;
}
else
{
result = PROV_DEVICE_RESULT_OK;
}
}
else if (strcmp(PROV_OPTION_TIMEOUT, option_name) == 0)
{
if (value == NULL)
{
LogError("setting PROV_OPTION_TIMEOUT option");
result = PROV_DEVICE_RESULT_ERROR;
}
else
{
handle->prov_timeout = *((uint8_t*)value);
result = PROV_DEVICE_RESULT_OK;
}
}
else if (strcmp(PROV_REGISTRATION_ID, option_name) == 0)
{
if (handle->prov_state != CLIENT_STATE_READY)
{
LogError("registration id cannot be set after registration has begun");
result = PROV_DEVICE_RESULT_ERROR;
}
else if (value == NULL)
{
LogError("value must be set to the correct registration id");
result = PROV_DEVICE_RESULT_ERROR;
}
else
{
char* temp_reg;
if (mallocAndStrcpy_s(&temp_reg, (const char*)value) != 0)
{
LogError("Failure allocating setting registration id");
result = PROV_DEVICE_RESULT_ERROR;
}
else if (prov_auth_set_registration_id(handle->prov_auth_handle, temp_reg) != 0)
{
LogError("Failure setting registration id");
free(temp_reg);
result = PROV_DEVICE_RESULT_ERROR;
}
else
{
if (handle->registration_id != NULL)
{
free(handle->registration_id);
}
handle->registration_id = temp_reg;
handle->user_supplied_reg_id = true;
result = PROV_DEVICE_RESULT_OK;
}
}
}
else if (strcmp(OPTION_X509_CERT, option_name) == 0)
{
if (handle->prov_state != CLIENT_STATE_READY)
{
LogError("Certificates cannot be set after registration has begun");
result = PROV_DEVICE_RESULT_ERROR;
}
else if (prov_auth_set_certificate(handle->prov_auth_handle, value) != 0)
{
LogError("Failure setting certificate");
result = PROV_DEVICE_RESULT_ERROR;
}
else
{
result = PROV_DEVICE_RESULT_OK;
}
}
else if (strcmp(OPTION_X509_PRIVATE_KEY, option_name) == 0)
{
if (handle->prov_state != CLIENT_STATE_READY)
{
LogError("Certificates cannot be set after registration has begun");
result = PROV_DEVICE_RESULT_ERROR;
}
else if (prov_auth_set_key(handle->prov_auth_handle, value) != 0)
{
LogError("Failure setting key");
result = PROV_DEVICE_RESULT_ERROR;
}
else
{
result = PROV_DEVICE_RESULT_OK;
}
}
else
{
if (handle->prov_transport_protocol->prov_transport_set_option(handle->transport_handle, option_name, value) != 0)
{
LogError("Failure in prov transport set option\n");
result = PROV_DEVICE_RESULT_ERROR;
}
else
{
result = PROV_DEVICE_RESULT_OK;
}
}
}
return result;
}