static DefenderStatus_t matchApi()

in source/defender.c [326:378]


static DefenderStatus_t matchApi( const char * pRemainingTopic,
                                  uint16_t remainingTopicLength,
                                  DefenderTopic_t * pOutApi )
{
    DefenderStatus_t ret = DefenderNoMatch;
    uint16_t i = 0U;
    /* Table of defender APIs. */
    static const DefenderTopic_t defenderApi[] =
    {
        DefenderJsonReportPublish,
        DefenderJsonReportAccepted,
        DefenderJsonReportRejected,
        DefenderCborReportPublish,
        DefenderCborReportAccepted,
        DefenderCborReportRejected,
    };
    /* Table of topic API strings in the same order as the above defenderApi table. */
    static const char * const defenderApiTopic[] =
    {
        DEFENDER_API_JSON_FORMAT,
        DEFENDER_API_JSON_FORMAT DEFENDER_API_ACCEPTED_SUFFIX,
        DEFENDER_API_JSON_FORMAT DEFENDER_API_REJECTED_SUFFIX,
        DEFENDER_API_CBOR_FORMAT,
        DEFENDER_API_CBOR_FORMAT DEFENDER_API_ACCEPTED_SUFFIX,
        DEFENDER_API_CBOR_FORMAT DEFENDER_API_REJECTED_SUFFIX,
    };
    /* Table of topic API string lengths in the same order as the above defenderApi table. */
    static const uint16_t defenderApiTopicLength[] =
    {
        DEFENDER_API_LENGTH_JSON_FORMAT,
        DEFENDER_API_LENGTH_JSON_FORMAT + DEFENDER_API_LENGTH_ACCEPTED_SUFFIX,
        DEFENDER_API_LENGTH_JSON_FORMAT + DEFENDER_API_LENGTH_REJECTED_SUFFIX,
        DEFENDER_API_LENGTH_CBOR_FORMAT,
        DEFENDER_API_LENGTH_CBOR_FORMAT + DEFENDER_API_LENGTH_ACCEPTED_SUFFIX,
        DEFENDER_API_LENGTH_CBOR_FORMAT + DEFENDER_API_LENGTH_REJECTED_SUFFIX,
    };

    for( i = 0U; i < sizeof( defenderApi ) / sizeof( defenderApi[ 0 ] ); i++ )
    {
        if( ( remainingTopicLength == defenderApiTopicLength[ i ] ) &&
            ( strncmp( pRemainingTopic,
                       defenderApiTopic[ i ],
                       ( size_t ) defenderApiTopicLength[ i ] ) == 0 ) )
        {
            *pOutApi = defenderApi[ i ];
            ret = DefenderSuccess;

            break;
        }
    }

    return ret;
}