source/azure_iot_hub_client_properties.c (214 lines of code) (raw):
/* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License. */
/**
* @file azure_iot_hub_client_properties.c
* @brief Implementation of the Azure IoT Hub Client properties.
*/
#include "azure_iot_hub_client_properties.h"
#include "azure_iot_private.h"
AzureIoTResult_t AzureIoTHubClientProperties_BuilderBeginComponent( AzureIoTHubClient_t * pxAzureIoTHubClient,
AzureIoTJSONWriter_t * pxJSONWriter,
const uint8_t * pucComponentName,
uint16_t usComponentNameLength )
{
AzureIoTResult_t xResult;
az_result xCoreResult;
az_span xComponentSpan;
if( ( pxAzureIoTHubClient == NULL ) ||
( pxJSONWriter == NULL ) ||
( pucComponentName == NULL ) ||
( usComponentNameLength == 0 ) )
{
AZLogError( ( "AzureIoTHubClientProperties_BuilderBeginComponent failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else
{
xComponentSpan = az_span_create( ( uint8_t * ) pucComponentName, usComponentNameLength );
if( az_result_failed(
xCoreResult = az_iot_hub_client_properties_writer_begin_component( &pxAzureIoTHubClient->_internal.xAzureIoTHubClientCore,
&pxJSONWriter->_internal.xCoreWriter, xComponentSpan ) ) )
{
AZLogError( ( "Could not begin component: core error=0x%08x", ( uint16_t ) xCoreResult ) );
xResult = AzureIoT_TranslateCoreError( xCoreResult );
}
else
{
xResult = eAzureIoTSuccess;
}
}
return xResult;
}
AzureIoTResult_t AzureIoTHubClientProperties_BuilderEndComponent( AzureIoTHubClient_t * pxAzureIoTHubClient,
AzureIoTJSONWriter_t * pxJSONWriter )
{
AzureIoTResult_t xResult;
az_result xCoreResult;
if( ( pxAzureIoTHubClient == NULL ) || ( pxJSONWriter == NULL ) )
{
AZLogError( ( "AzureIoTHubClientProperties_BuilderEndComponent failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else
{
if( az_result_failed(
xCoreResult = az_iot_hub_client_properties_writer_end_component( &pxAzureIoTHubClient->_internal.xAzureIoTHubClientCore,
&pxJSONWriter->_internal.xCoreWriter ) ) )
{
AZLogError( ( "Could not end component: core error=0x%08x", ( uint16_t ) xCoreResult ) );
xResult = AzureIoT_TranslateCoreError( xCoreResult );
}
else
{
xResult = eAzureIoTSuccess;
}
}
return xResult;
}
AzureIoTResult_t AzureIoTHubClientProperties_BuilderBeginResponseStatus( AzureIoTHubClient_t * pxAzureIoTHubClient,
AzureIoTJSONWriter_t * pxJSONWriter,
const uint8_t * pucPropertyName,
uint16_t usPropertyNameLength,
int32_t lAckCode,
int32_t lAckVersion,
const uint8_t * pucAckDescription,
uint16_t usAckDescriptionLength )
{
AzureIoTResult_t xResult;
az_result xCoreResult;
az_span xPropertyName;
az_span xAckDescription;
if( ( pxAzureIoTHubClient == NULL ) ||
( pxJSONWriter == NULL ) ||
( pucPropertyName == NULL ) ||
( usPropertyNameLength == 0 ) )
{
AZLogError( ( "AzureIoTHubClientProperties_BuilderBeginResponseStatus failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else
{
xPropertyName = az_span_create( ( uint8_t * ) pucPropertyName, usPropertyNameLength );
xAckDescription = az_span_create( ( uint8_t * ) pucAckDescription, usAckDescriptionLength );
if( az_result_failed(
xCoreResult = az_iot_hub_client_properties_writer_begin_response_status( &pxAzureIoTHubClient->_internal.xAzureIoTHubClientCore,
&pxJSONWriter->_internal.xCoreWriter,
xPropertyName,
lAckCode, lAckVersion,
xAckDescription ) ) )
{
AZLogError( ( "Could not begin response: core error=0x%08x", ( uint16_t ) xCoreResult ) );
xResult = AzureIoT_TranslateCoreError( xCoreResult );
}
else
{
xResult = eAzureIoTSuccess;
}
}
return xResult;
}
AzureIoTResult_t AzureIoTHubClientProperties_BuilderEndResponseStatus( AzureIoTHubClient_t * pxAzureIoTHubClient,
AzureIoTJSONWriter_t * pxJSONWriter )
{
AzureIoTResult_t xResult;
az_result xCoreResult;
if( ( pxAzureIoTHubClient == NULL ) || ( pxJSONWriter == NULL ) )
{
AZLogError( ( "AzureIoTHubClientProperties_BuilderEndResponseStatus failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else
{
if( az_result_failed(
xCoreResult = az_iot_hub_client_properties_writer_end_response_status( &pxAzureIoTHubClient->_internal.xAzureIoTHubClientCore,
&pxJSONWriter->_internal.xCoreWriter ) ) )
{
AZLogError( ( "Could not end response: core error=0x%08x", ( uint16_t ) xCoreResult ) );
xResult = AzureIoT_TranslateCoreError( xCoreResult );
}
else
{
xResult = eAzureIoTSuccess;
}
}
return xResult;
}
AzureIoTResult_t AzureIoTHubClientProperties_GetPropertiesVersion( AzureIoTHubClient_t * pxAzureIoTHubClient,
AzureIoTJSONReader_t * pxJSONReader,
AzureIoTHubMessageType_t xResponseType,
uint32_t * pulVersion )
{
AzureIoTResult_t xResult;
az_result xCoreResult;
az_iot_hub_client_properties_message_type xCoreMessageType;
if( ( pxAzureIoTHubClient == NULL ) ||
( pxJSONReader == NULL ) ||
( ( xResponseType != eAzureIoTHubPropertiesRequestedMessage ) &&
( xResponseType != eAzureIoTHubPropertiesWritablePropertyMessage ) ) ||
( pulVersion == NULL ) )
{
AZLogError( ( "AzureIoTHubClientProperties_GetPropertiesVersion failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else
{
xCoreMessageType = xResponseType == eAzureIoTHubPropertiesRequestedMessage ?
AZ_IOT_HUB_CLIENT_PROPERTIES_MESSAGE_TYPE_GET_RESPONSE : AZ_IOT_HUB_CLIENT_PROPERTIES_MESSAGE_TYPE_WRITABLE_UPDATED;
if( az_result_failed(
xCoreResult = az_iot_hub_client_properties_get_properties_version( &pxAzureIoTHubClient->_internal.xAzureIoTHubClientCore,
&pxJSONReader->_internal.xCoreReader, xCoreMessageType, ( int32_t * ) pulVersion ) ) )
{
AZLogError( ( "Could not get property version: core error=0x%08x", ( uint16_t ) xCoreResult ) );
xResult = AzureIoT_TranslateCoreError( xCoreResult );
}
else
{
xResult = eAzureIoTSuccess;
}
}
return xResult;
}
AzureIoTResult_t AzureIoTHubClientProperties_GetNextComponentProperty( AzureIoTHubClient_t * pxAzureIoTHubClient,
AzureIoTJSONReader_t * pxJSONReader,
AzureIoTHubMessageType_t xResponseType,
AzureIoTHubClientPropertyType_t xPropertyType,
const uint8_t ** ppucComponentName,
uint32_t * pulComponentNameLength )
{
AzureIoTResult_t xResult;
az_result xCoreResult;
az_span xComponentSpan;
az_iot_hub_client_properties_message_type xCoreMessageType;
if( ( pxAzureIoTHubClient == NULL ) || ( pxJSONReader == NULL ) ||
( ( xResponseType != eAzureIoTHubPropertiesRequestedMessage ) &&
( xResponseType != eAzureIoTHubPropertiesWritablePropertyMessage ) ) ||
( ppucComponentName == NULL ) || ( pulComponentNameLength == NULL ) )
{
AZLogError( ( "AzureIoTHubClientProperties_GetNextComponentProperty failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else
{
xComponentSpan = az_span_create( ( uint8_t * ) *ppucComponentName, ( int32_t ) *pulComponentNameLength );
xCoreMessageType = xResponseType == eAzureIoTHubPropertiesRequestedMessage ?
AZ_IOT_HUB_CLIENT_PROPERTIES_MESSAGE_TYPE_GET_RESPONSE : AZ_IOT_HUB_CLIENT_PROPERTIES_MESSAGE_TYPE_WRITABLE_UPDATED;
if( az_result_failed(
xCoreResult = az_iot_hub_client_properties_get_next_component_property( &pxAzureIoTHubClient->_internal.xAzureIoTHubClientCore,
&pxJSONReader->_internal.xCoreReader,
xCoreMessageType,
( az_iot_hub_client_property_type ) xPropertyType,
&xComponentSpan ) ) )
{
if( xCoreResult == AZ_ERROR_IOT_END_OF_PROPERTIES )
{
xResult = eAzureIoTErrorEndOfProperties;
}
else
{
AZLogError( ( "Could not get next component property: core error=0x%08x", ( uint16_t ) xCoreResult ) );
xResult = AzureIoT_TranslateCoreError( xCoreResult );
}
}
else
{
*ppucComponentName = az_span_ptr( xComponentSpan );
*pulComponentNameLength = ( uint16_t ) az_span_size( xComponentSpan );
xResult = eAzureIoTSuccess;
}
}
return xResult;
}