in source/shadow.c [455:506]
static ShadowStatus_t extractShadowRootAndName( const char * pTopic,
uint16_t topicLength,
uint16_t * pConsumedTopicLength,
uint8_t * pShadowNameLength )
{
/* Look for the named shadow root */
ShadowStatus_t shadowStatus = containsSubString( &( pTopic[ *pConsumedTopicLength ] ),
topicLength - *pConsumedTopicLength,
SHADOW_NAMED_ROOT,
SHADOW_NAMED_ROOT_LENGTH );
if( shadowStatus == SHADOW_SUCCESS )
{
/* Topic is a named shadow */
*pConsumedTopicLength += SHADOW_NAMED_ROOT_LENGTH;
/* Extract shadow name. */
shadowStatus = validateName( &( pTopic[ *pConsumedTopicLength ] ),
topicLength - *pConsumedTopicLength,
SHADOW_NAME_MAX_LENGTH,
pShadowNameLength );
if( shadowStatus != SHADOW_SUCCESS )
{
shadowStatus = SHADOW_SHADOWNAME_PARSE_FAILED;
}
else
{
*pConsumedTopicLength += *pShadowNameLength;
}
}
else
{
/* Not a named shadow. Try to match the classic shadow root. */
shadowStatus = containsSubString( &( pTopic[ *pConsumedTopicLength ] ),
topicLength - *pConsumedTopicLength,
SHADOW_CLASSIC_ROOT,
SHADOW_CLASSIC_ROOT_LENGTH );
if( shadowStatus == SHADOW_SUCCESS )
{
*pConsumedTopicLength += SHADOW_CLASSIC_ROOT_LENGTH;
}
else
{
shadowStatus = SHADOW_ROOT_PARSE_FAILED;
LogDebug( ( "Not a Shadow topic. Failed to parse shadow root in pTopic %.*s", topicLength, pTopic ) );
}
}
return shadowStatus;
}