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