in source/shadow.c [510:585]
static ShadowStatus_t extractShadowMessageType( const char * pString,
uint16_t stringLength,
ShadowMessageType_t * pMessageType )
{
uint32_t index = 0U;
ShadowStatus_t returnStatus = SHADOW_FAIL;
/* Lookup table for Shadow message string. */
static const char * const pMessageStrings[ ShadowMessageTypeMaxNum ] =
{
SHADOW_OP_GET_ACCEPTED,
SHADOW_OP_GET_REJECTED,
SHADOW_OP_DELETE_ACCEPTED,
SHADOW_OP_DELETE_REJECTED,
SHADOW_OP_UPDATE_ACCEPTED,
SHADOW_OP_UPDATE_REJECTED,
SHADOW_OP_UPDATE_DOCUMENTS,
SHADOW_OP_UPDATE_DELTA
};
/* Lookup table for Shadow message string length. */
static const uint16_t pMessageStringsLength[ ShadowMessageTypeMaxNum ] =
{
SHADOW_OP_GET_ACCEPTED_LENGTH,
SHADOW_OP_GET_REJECTED_LENGTH,
SHADOW_OP_DELETE_ACCEPTED_LENGTH,
SHADOW_OP_DELETE_REJECTED_LENGTH,
SHADOW_OP_UPDATE_ACCEPTED_LENGTH,
SHADOW_OP_UPDATE_REJECTED_LENGTH,
SHADOW_OP_UPDATE_DOCUMENTS_LENGTH,
SHADOW_OP_UPDATE_DELTA_LENGTH
};
/* Lookup table for Shadow message types. */
static const ShadowMessageType_t pMessageTypes[ ShadowMessageTypeMaxNum ] =
{
ShadowMessageTypeGetAccepted,
ShadowMessageTypeGetRejected,
ShadowMessageTypeDeleteAccepted,
ShadowMessageTypeDeleteRejected,
ShadowMessageTypeUpdateAccepted,
ShadowMessageTypeUpdateRejected,
ShadowMessageTypeUpdateDocuments,
ShadowMessageTypeUpdateDelta
};
for( ; index < ( uint32_t ) ( sizeof( pMessageStrings ) / sizeof( pMessageStrings[ 0 ] ) ); index++ )
{
returnStatus = containsSubString( pString,
stringLength,
pMessageStrings[ index ],
pMessageStringsLength[ index ] );
/* If the operation string matches, there must not be any other extra
* character remaining in the string. */
if( returnStatus == SHADOW_SUCCESS )
{
if( stringLength != pMessageStringsLength[ index ] )
{
returnStatus = SHADOW_FAIL;
}
else
{
*pMessageType = pMessageTypes[ index ];
break;
}
}
}
if( returnStatus != SHADOW_SUCCESS )
{
LogDebug( ( "Not a Shadow topic. Failed to match shadow message type in pString %.*s", stringLength, pString ) );
}
return returnStatus;
}