STATUS parseConfigFile()

in canary/producer-c/canary/KvsProducerSampleCloudwatch.cpp [66:151]


STATUS parseConfigFile(PCanaryConfig pCanaryConfig, PCHAR filePath)
{
    STATUS retStatus = STATUS_SUCCESS;

    UINT64 size;
    jsmn_parser parser;
    CHAR final_attr_str[256];
    int r;
    BYTE params[1024];

    CHK(pCanaryConfig != NULL, STATUS_NULL_ARG);
    CHK_STATUS(readFile(filePath, TRUE, NULL, &size));
    CHK_ERR(size < 1024, STATUS_INVALID_ARG_LEN, "File size too big. Max allowed is 1024 bytes");
    CHK_STATUS(readFile(filePath, TRUE, params, &size));

    jsmn_init(&parser);
    jsmntok_t tokens[256];

    r = jsmn_parse(&parser, (PCHAR) params, size, tokens, 256);

    for (UINT32 i = 1; i < (UINT32) r; i++) {
        if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, CANARY_STREAM_NAME_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->streamNamePrefix);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, CANARY_TYPE_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->canaryTypeStr);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, FRAGMENT_SIZE_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], final_attr_str);
            STRTOUI64(final_attr_str, NULL, 10, &pCanaryConfig->fragmentSizeInBytes);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, CANARY_DURATION_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], final_attr_str);
            STRTOUI64(final_attr_str, NULL, 10, &pCanaryConfig->canaryDuration);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, CANARY_BUFFER_DURATION_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], final_attr_str);
            STRTOUI64(final_attr_str, NULL, 10, &pCanaryConfig->bufferDuration);
            pCanaryConfig->bufferDuration = pCanaryConfig->bufferDuration * HUNDREDS_OF_NANOS_IN_A_SECOND;
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, CANARY_STORAGE_SIZE_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], final_attr_str);
            STRTOUI64(final_attr_str, NULL, 10, &pCanaryConfig->storageSizeInBytes);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, CANARY_LABEL_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->canaryLabel);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, CANARY_SCENARIO_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->canaryScenario);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, CANARY_TRACK_TYPE_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->canaryTrackType);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, CANARY_CP_API_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->canaryCpUrl);  
            i++;
        }

        // IoT related items
        else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, (PCHAR) CANARY_USE_IOT_CREDENTIALS_ENV_VAR)) {
            getJsonBoolValue(params, tokens[++i], &pCanaryConfig->useIotCredentialProvider);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_CREDENTIAL_ENDPOINT_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->iotCoreCredentialEndPointFile);
            CHK_STATUS(readFile(pCanaryConfig->iotCoreCredentialEndPointFile, TRUE, NULL, &size));
            CHK_ERR(size != 0, STATUS_PRODUCER_EMPTY_IOT_CRED_FILE, "Empty credential file");
            CHK_STATUS(readFile(pCanaryConfig->iotCoreCredentialEndPointFile, TRUE,pCanaryConfig->iotEndpoint, &size));
            pCanaryConfig->iotEndpoint[size - 1] = '\0';
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_CERT_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->iotCoreCert);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_PRIVATE_KEY_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->iotCorePrivateKey);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_ROLE_ALIAS_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->iotCoreRoleAlias);
            i++;
        } else if (compareJsonString((PCHAR) params, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_THING_NAME_ENV_VAR)) {
            getJsonValue(params, tokens[i + 1], pCanaryConfig->iotThingName);
            i++;
        }
    }
CleanUp:
    return retStatus;
}