in source/azure_iot_adu_client.c [202:265]
AzureIoTResult_t AzureIoTADUClient_ParseRequest( AzureIoTADUClient_t * pxAzureIoTADUClient,
AzureIoTJSONReader_t * pxReader,
AzureIoTADUUpdateRequest_t * pxAduUpdateRequest )
{
az_iot_adu_client_update_request xBaseUpdateRequest;
az_iot_adu_client_update_manifest xBaseUpdateManifest;
az_result xAzResult;
az_json_reader jr;
if( ( pxAzureIoTADUClient == NULL ) || ( pxReader == NULL ) ||
( pxAduUpdateRequest == NULL ) )
{
AZLogError( ( "AzureIoTADUClient_ParseRequest failed: invalid argument" ) );
return eAzureIoTErrorInvalidArgument;
}
xAzResult = az_iot_adu_client_parse_service_properties(
&pxAzureIoTADUClient->_internal.xADUClient,
&pxReader->_internal.xCoreReader,
&xBaseUpdateRequest );
if( az_result_failed( xAzResult ) )
{
AZLogError( ( "az_iot_adu_client_parse_service_properties failed" ) );
return AzureIoT_TranslateCoreError( xAzResult );
}
else
{
if( az_span_size( xBaseUpdateRequest.update_manifest ) > 0 )
{
/* This unescape is done in place to save space. It will modify the original payload buffer. */
xBaseUpdateRequest.update_manifest = az_json_string_unescape( xBaseUpdateRequest.update_manifest, xBaseUpdateRequest.update_manifest );
xAzResult = az_json_reader_init( &jr, xBaseUpdateRequest.update_manifest, NULL );
if( az_result_failed( xAzResult ) )
{
AZLogError( ( "az_json_reader_init failed: 0x%08x", ( uint16_t ) xAzResult ) );
return AzureIoT_TranslateCoreError( xAzResult );
}
xAzResult = az_iot_adu_client_parse_update_manifest(
&pxAzureIoTADUClient->_internal.xADUClient,
&jr,
&xBaseUpdateManifest );
if( az_result_failed( xAzResult ) )
{
AZLogError( ( "az_iot_adu_client_parse_update_manifest failed: 0x%08x", ( uint16_t ) xAzResult ) );
return AzureIoT_TranslateCoreError( xAzResult );
}
}
else
{
/*No manifest to parse */
}
prvCastUpdateRequest( &xBaseUpdateRequest,
az_span_size( xBaseUpdateRequest.update_manifest ) > 0 ? &xBaseUpdateManifest : NULL,
pxAduUpdateRequest, az_span_ptr( xBaseUpdateRequest.update_manifest ), ( uint32_t ) az_span_size( xBaseUpdateRequest.update_manifest ) );
}
return eAzureIoTSuccess;
}