MQTTStatus_t MQTTAgent_CancelAll()

in source/core_mqtt_agent.c [1081:1126]


MQTTStatus_t MQTTAgent_CancelAll( MQTTAgentContext_t * pMqttAgentContext )
{
    MQTTStatus_t statusReturn = MQTTSuccess;
    MQTTAgentCommand_t * pReceivedCommand = NULL;
    bool commandWasReceived = false;
    MQTTAgentAckInfo_t * pendingAcks;
    size_t i;

    if( ( pMqttAgentContext == NULL ) || ( pMqttAgentContext->agentInterface.pMsgCtx == NULL ) )
    {
        statusReturn = MQTTBadParameter;
    }
    else
    {
        /* Cancel all operations waiting in the queue. */
        do
        {
            pReceivedCommand = NULL;
            commandWasReceived = pMqttAgentContext->agentInterface.recv(
                pMqttAgentContext->agentInterface.pMsgCtx,
                &( pReceivedCommand ),
                0U );

            if( pReceivedCommand != NULL )
            {
                concludeCommand( pMqttAgentContext, pReceivedCommand, MQTTRecvFailed, NULL );
            }
        } while( commandWasReceived );

        pendingAcks = pMqttAgentContext->pPendingAcks;

        /* Cancel any operations awaiting an acknowledgment. */
        for( i = 0; i < MQTT_AGENT_MAX_OUTSTANDING_ACKS; i++ )
        {
            if( pendingAcks[ i ].packetId != MQTT_PACKET_ID_INVALID )
            {
                concludeCommand( pMqttAgentContext, pendingAcks[ i ].pOriginalCommand, MQTTRecvFailed, NULL );

                /* Now remove it from the list. */
                ( void ) memset( &( pendingAcks[ i ] ), 0x00, sizeof( MQTTAgentAckInfo_t ) );
            }
        }
    }

    return statusReturn;
}