AzureIoTResult_t AzureIoTADUClient_ParseRequest()

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;
}