in iothub_service_client/src/iothub_deviceconfiguration.c [186:316]
static IOTHUB_DEVICE_CONFIGURATION_RESULT sendHttpRequestDeviceConfiguration(IOTHUB_SERVICE_CLIENT_DEVICE_CONFIGURATION_HANDLE serviceClientDeviceConfigurationHandle, IOTHUB_DEVICECONFIGURATION_REQUEST_MODE iotHubDeviceConfigurationRequestMode, const char* id, BUFFER_HANDLE json, size_t maxConfigurationsCount, BUFFER_HANDLE responseBuffer)
{
IOTHUB_DEVICE_CONFIGURATION_RESULT result;
STRING_HANDLE uriResource = NULL;
STRING_HANDLE accessKey = NULL;
STRING_HANDLE keyName = NULL;
HTTPAPIEX_SAS_HANDLE httpExApiSasHandle;
HTTPAPIEX_HANDLE httpExApiHandle;
HTTP_HEADERS_HANDLE httpHeader;
if ((uriResource = STRING_construct(serviceClientDeviceConfigurationHandle->hostname)) == NULL)
{
LogError("STRING_construct failed for uriResource");
result = IOTHUB_DEVICE_CONFIGURATION_ERROR;
}
else if ((accessKey = STRING_construct(serviceClientDeviceConfigurationHandle->sharedAccessKey)) == NULL)
{
LogError("STRING_construct failed for accessKey");
STRING_delete(uriResource);
result = IOTHUB_DEVICE_CONFIGURATION_ERROR;
}
else if ((keyName = STRING_construct(serviceClientDeviceConfigurationHandle->keyName)) == NULL)
{
LogError("STRING_construct failed for keyName");
STRING_delete(accessKey);
STRING_delete(uriResource);
result = IOTHUB_DEVICE_CONFIGURATION_ERROR;
}
else if ((httpHeader = createHttpHeader(iotHubDeviceConfigurationRequestMode)) == NULL)
{
LogError("HttpHeader creation failed");
STRING_delete(keyName);
STRING_delete(accessKey);
STRING_delete(uriResource);
result = IOTHUB_DEVICE_CONFIGURATION_ERROR;
}
else if ((httpExApiSasHandle = HTTPAPIEX_SAS_Create(accessKey, uriResource, keyName)) == NULL)
{
LogError("HTTPAPIEX_SAS_Create failed");
HTTPHeaders_Free(httpHeader);
STRING_delete(keyName);
STRING_delete(accessKey);
STRING_delete(uriResource);
result = IOTHUB_DEVICE_CONFIGURATION_HTTPAPI_ERROR;
}
else if ((httpExApiHandle = HTTPAPIEX_Create(serviceClientDeviceConfigurationHandle->hostname)) == NULL)
{
LogError("HTTPAPIEX_Create failed");
HTTPAPIEX_SAS_Destroy(httpExApiSasHandle);
HTTPHeaders_Free(httpHeader);
STRING_delete(keyName);
STRING_delete(accessKey);
STRING_delete(uriResource);
result = IOTHUB_DEVICE_CONFIGURATION_HTTPAPI_ERROR;
}
else
{
HTTPAPI_REQUEST_TYPE httpApiRequestType = HTTPAPI_REQUEST_GET;
STRING_HANDLE relativePath;
unsigned int statusCode = 0;
unsigned char is_error = 0;
if ((iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_ADD) || (iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_UPDATE))
{
httpApiRequestType = HTTPAPI_REQUEST_PUT;
}
else if ((iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_GET) || (iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_GET_LIST))
{
httpApiRequestType = HTTPAPI_REQUEST_GET;
}
else if (iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_DELETE)
{
httpApiRequestType = HTTPAPI_REQUEST_DELETE;
}
else if (iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_APPLY_CONFIGURATION_CONTENT)
{
httpApiRequestType = HTTPAPI_REQUEST_POST;
}
else
{
is_error = 1;
}
if (is_error)
{
LogError("Invalid request type");
result = IOTHUB_DEVICE_CONFIGURATION_HTTPAPI_ERROR;
}
else
{
if ((relativePath = createRelativePath(iotHubDeviceConfigurationRequestMode, id, maxConfigurationsCount)) == NULL)
{
LogError("Failure creating relative path");
result = IOTHUB_DEVICE_CONFIGURATION_ERROR;
}
else if (HTTPAPIEX_SAS_ExecuteRequest(httpExApiSasHandle, httpExApiHandle, httpApiRequestType, STRING_c_str(relativePath), httpHeader, json, &statusCode, NULL, responseBuffer) != HTTPAPIEX_OK)
{
LogError("HTTPAPIEX_SAS_ExecuteRequest failed");
STRING_delete(relativePath);
result = IOTHUB_DEVICE_CONFIGURATION_HTTPAPI_ERROR;
}
else
{
STRING_delete(relativePath);
if ((((iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_ADD) ||
(iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_GET) ||
(iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_GET_LIST) ||
(iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_UPDATE)) && (statusCode == 200)) ||
((iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_DELETE) && (statusCode == 204)) ||
((iotHubDeviceConfigurationRequestMode == IOTHUB_DEVICECONFIGURATION_REQUEST_APPLY_CONFIGURATION_CONTENT) && ((statusCode == 200) || (statusCode == 204)))
)
{
result = IOTHUB_DEVICE_CONFIGURATION_OK;
}
else
{
LogError("Http Failure status code %d.", statusCode);
result = IOTHUB_DEVICE_CONFIGURATION_ERROR;
}
}
}
HTTPAPIEX_Destroy(httpExApiHandle);
HTTPAPIEX_SAS_Destroy(httpExApiSasHandle);
HTTPHeaders_Free(httpHeader);
STRING_delete(keyName);
STRING_delete(accessKey);
STRING_delete(uriResource);
}
return result;
}