static AzureIoTResult_t prvProvClientRunWorkflow()

in source/azure_iot_provisioning_client.c [502:557]


static AzureIoTResult_t prvProvClientRunWorkflow( AzureIoTProvisioningClient_t * pxAzureProvClient,
                                                  uint32_t ulTimeoutMilliseconds )
{
    AzureIoTMQTTResult_t xMQTTResult;
    AzureIoTResult_t xResult;
    uint32_t ulWaitTime;

    do
    {
        if( pxAzureProvClient->_internal.ulWorkflowState == azureiotprovisioningWF_STATE_COMPLETE )
        {
            AZLogDebug( ( "AzureIoTProvisioning state is already in complete state" ) );
            break;
        }

        if( ulTimeoutMilliseconds > azureiotprovisioningPROCESS_LOOP_TIMEOUT_MS )
        {
            ulTimeoutMilliseconds -= azureiotprovisioningPROCESS_LOOP_TIMEOUT_MS;
            ulWaitTime = azureiotprovisioningPROCESS_LOOP_TIMEOUT_MS;
        }
        else
        {
            ulWaitTime = ulTimeoutMilliseconds;
            ulTimeoutMilliseconds = 0;
        }

        prvProvClientTriggerAction( pxAzureProvClient );

        if( pxAzureProvClient->_internal.ulWorkflowState == azureiotprovisioningWF_STATE_COMPLETE )
        {
            AZLogDebug( ( "AzureIoTProvisioning is in complete state: status=0x%08x",
                          ( uint16_t ) pxAzureProvClient->_internal.ulLastOperationResult ) );
            break;
        }
        else if( ( xMQTTResult =
                       AzureIoTMQTT_ProcessLoop( &( pxAzureProvClient->_internal.xMQTTContext ),
                                                 ulWaitTime ) ) != eAzureIoTMQTTSuccess )
        {
            AZLogError( ( "AzureIoTProvisioning failed to process loop: ProcessLoopDuration=%u, MQTT error=0x%08x",
                          ( uint16_t ) ulTimeoutMilliseconds, ( uint16_t ) xMQTTResult ) );
            prvProvClientUpdateState( pxAzureProvClient, eAzureIoTErrorFailed );
            break;
        }
    } while( ulTimeoutMilliseconds );

    if( ( pxAzureProvClient->_internal.ulWorkflowState != azureiotprovisioningWF_STATE_COMPLETE ) )
    {
        xResult = eAzureIoTErrorPending;
    }
    else
    {
        xResult = pxAzureProvClient->_internal.ulLastOperationResult;
    }

    return xResult;
}