in iothub_service_client/src/iothub_registrymanager.c [1149:1264]
static IOTHUB_REGISTRYMANAGER_RESULT sendHttpRequestCRUD(IOTHUB_REGISTRYMANAGER_HANDLE registryManagerHandle, IOTHUB_REQUEST_MODE iotHubRequestMode, const char* deviceName, const char* moduleId, BUFFER_HANDLE deviceJsonBuffer, size_t numberOfDevices, BUFFER_HANDLE responseBuffer)
{
IOTHUB_REGISTRYMANAGER_RESULT result;
STRING_HANDLE uriResource = NULL;
STRING_HANDLE accessKey = NULL;
STRING_HANDLE keyName = NULL;
HTTPAPIEX_SAS_HANDLE httpExApiSasHandle = NULL;
HTTPAPIEX_HANDLE httpExApiHandle = NULL;
HTTP_HEADERS_HANDLE httpHeader = NULL;
if ((uriResource = createUriPath(registryManagerHandle)) == NULL)
{
LogError("STRING_construct failed for uriResource");
result = IOTHUB_REGISTRYMANAGER_ERROR;
}
else if ((accessKey = STRING_construct(registryManagerHandle->sharedAccessKey)) == NULL)
{
LogError("STRING_construct failed for accessKey");
result = IOTHUB_REGISTRYMANAGER_ERROR;
}
else if ((registryManagerHandle->keyName != NULL) && ((keyName = STRING_construct(registryManagerHandle->keyName)) == NULL))
{
LogError("STRING_construct failed for keyName");
result = IOTHUB_REGISTRYMANAGER_ERROR;
}
else if ((httpHeader = createHttpHeader(iotHubRequestMode)) == NULL)
{
LogError("HttpHeader creation failed");
result = IOTHUB_REGISTRYMANAGER_HTTPAPI_ERROR;
}
else if ((httpExApiSasHandle = HTTPAPIEX_SAS_Create(accessKey, uriResource, keyName)) == NULL)
{
LogError("HTTPAPIEX_SAS_Create failed");
result = IOTHUB_REGISTRYMANAGER_HTTPAPI_ERROR;
}
else if ((httpExApiHandle = HTTPAPIEX_Create(registryManagerHandle->hostname)) == NULL)
{
LogError("HTTPAPIEX_Create failed");
result = IOTHUB_REGISTRYMANAGER_HTTPAPI_ERROR;
}
else
{
HTTPAPI_REQUEST_TYPE httpApiRequestType = HTTPAPI_REQUEST_GET;
char relativePath[256];
unsigned int statusCode;
unsigned char is_error = 0;
if ((iotHubRequestMode == IOTHUB_REQUEST_CREATE) || (iotHubRequestMode == IOTHUB_REQUEST_UPDATE))
{
httpApiRequestType = HTTPAPI_REQUEST_PUT;
}
else if (iotHubRequestMode == IOTHUB_REQUEST_DELETE)
{
httpApiRequestType = HTTPAPI_REQUEST_DELETE;
}
else if ((iotHubRequestMode == IOTHUB_REQUEST_GET) || (iotHubRequestMode == IOTHUB_REQUEST_GET_DEVICE_LIST) || (iotHubRequestMode == IOTHUB_REQUEST_GET_STATISTICS))
{
httpApiRequestType = HTTPAPI_REQUEST_GET;
}
else
{
is_error = 1;
}
if (is_error)
{
LogError("Invalid request type");
result = IOTHUB_REGISTRYMANAGER_HTTPAPI_ERROR;
}
else
{
if (createRelativePath(iotHubRequestMode, deviceName, moduleId, numberOfDevices, relativePath) != IOTHUB_REGISTRYMANAGER_OK)
{
LogError("Failure creating relative path");
result = IOTHUB_REGISTRYMANAGER_ERROR;
}
else if (HTTPAPIEX_SAS_ExecuteRequest(httpExApiSasHandle, httpExApiHandle, httpApiRequestType, relativePath, httpHeader, deviceJsonBuffer, &statusCode, NULL, responseBuffer) != HTTPAPIEX_OK)
{
LogError("HTTPAPIEX_SAS_ExecuteRequest failed. Host:%s", registryManagerHandle->hostname);
result = IOTHUB_REGISTRYMANAGER_HTTPAPI_ERROR;
}
else
{
if (statusCode > 300)
{
if ((iotHubRequestMode == IOTHUB_REQUEST_CREATE) && (statusCode == 409))
{
result = IOTHUB_REGISTRYMANAGER_DEVICE_EXIST;
}
else if ((iotHubRequestMode == IOTHUB_REQUEST_GET) && (statusCode == 404))
{
result = IOTHUB_REGISTRYMANAGER_DEVICE_NOT_EXIST;
}
else
{
LogError("Http Failure status code %d.", statusCode);
result = IOTHUB_REGISTRYMANAGER_HTTP_STATUS_ERROR;
}
}
else
{
result = IOTHUB_REGISTRYMANAGER_OK;
}
}
}
}
HTTPHeaders_Free(httpHeader);
HTTPAPIEX_Destroy(httpExApiHandle);
HTTPAPIEX_SAS_Destroy(httpExApiSasHandle);
STRING_delete(keyName);
STRING_delete(accessKey);
STRING_delete(uriResource);
return result;
}