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