static ShadowStatus_t extractShadowRootAndName()

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