static FleetProvisioningTopic_t parseRegisterThingTopic()

in source/fleet_provisioning.c [513:565]


static FleetProvisioningTopic_t parseRegisterThingTopic( const char * pTopic,
                                                         uint16_t topicLength )
{
    /* Table of topics in the same order as TopicFormatSuffix_t. */
    static const FleetProvisioningTopic_t registerThingApi[] =
    {
        FleetProvJsonRegisterThingPublish,
        FleetProvJsonRegisterThingAccepted,
        FleetProvJsonRegisterThingRejected,
        FleetProvCborRegisterThingPublish,
        FleetProvCborRegisterThingAccepted,
        FleetProvCborRegisterThingRejected,
        FleetProvisioningInvalidTopic
    };
    FleetProvisioningTopic_t ret = FleetProvisioningInvalidTopic;
    FleetProvisioningStatus_t status = FleetProvisioningError;
    TopicFormatSuffix_t rest = TopicInvalidFormatSuffix;
    const char * pTopicCursor = pTopic;
    uint16_t cursorLength = topicLength;

    assert( pTopic != NULL );

    /* Check if prefix matches */
    status = consumeIfMatch( &pTopicCursor,
                             &cursorLength,
                             FP_REGISTER_API_PREFIX,
                             FP_REGISTER_API_LENGTH_PREFIX );

    if( status == FleetProvisioningSuccess )
    {
        /* Skip template name */
        status = consumeTemplateName( &pTopicCursor,
                                      &cursorLength );
    }

    if( status == FleetProvisioningSuccess )
    {
        /* Check if bridge matches */
        status = consumeIfMatch( &pTopicCursor,
                                 &cursorLength,
                                 FP_REGISTER_API_BRIDGE,
                                 FP_REGISTER_API_LENGTH_BRIDGE );
    }

    if( status == FleetProvisioningSuccess )
    {
        /* Match format and suffix */
        rest = parseTopicFormatSuffix( pTopicCursor, cursorLength );
        ret = registerThingApi[ rest ];
    }

    return ret;
}