STATUS Config::initWithJSON()

in canary/webrtc-c/src/Config.cpp [293:379]


STATUS Config::initWithJSON(PCHAR filePath)
{
    STATUS retStatus = STATUS_SUCCESS;
    UINT64 size;
    jsmn_parser parser;
    int r;
    BYTE raw[MAX_CONFIG_JSON_FILE_SIZE];
    UINT64 fileSize;
    Config::Value<UINT64> logLevel64;

    CHK_STATUS(readFile(filePath, TRUE, NULL, &size));
    CHK_ERR(size < MAX_CONFIG_JSON_FILE_SIZE, STATUS_INVALID_ARG_LEN, "File size too big. Max allowed is 1024 bytes");
    CHK_STATUS(readFile(filePath, TRUE, raw, &size));

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

    r = jsmn_parse(&parser, (PCHAR) raw, size, tokens, MAX_CONFIG_JSON_TOKENS);
    for (UINT32 i = 0; i < (UINT32) r; i++) {
        if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_ENDPOINT_ENV_VAR)) {
            jsonString(raw, tokens[++i], &endpoint);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_LABEL_ENV_VAR)) {
            jsonString(raw, tokens[++i], &label);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_CHANNEL_NAME_ENV_VAR)) {
            jsonString(raw, tokens[++i], &channelName);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_CLIENT_ID_ENV_VAR)) {
            jsonString(raw, tokens[++i], &clientId);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_TRICKLE_ICE_ENV_VAR)) {
            jsonBool(raw, tokens[++i], &trickleIce);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_IS_MASTER_ENV_VAR)) {
            jsonBool(raw, tokens[++i], &isMaster);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_USE_TURN_ENV_VAR)) {
            jsonBool(raw, tokens[++i], &useTurn);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_LOG_GROUP_NAME_ENV_VAR)) {
            jsonString(raw, tokens[++i], &logGroupName);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_LOG_STREAM_NAME_ENV_VAR)) {
            jsonString(raw, tokens[++i], &logStreamName);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_DURATION_IN_SECONDS_ENV_VAR)) {
            jsonUint64(raw, tokens[++i], &duration);
            duration.value *= HUNDREDS_OF_NANOS_IN_A_SECOND;
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_ITERATION_IN_SECONDS_ENV_VAR)) {
            jsonUint64(raw, tokens[++i], &iterationDuration);
            iterationDuration.value *= HUNDREDS_OF_NANOS_IN_A_SECOND;
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_FORCE_TURN_ENV_VAR)) {
            jsonBool(raw, tokens[++i], &forceTurn);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_BIT_RATE_ENV_VAR)) {
            jsonUint64(raw, tokens[++i], &bitRate);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_FRAME_RATE_ENV_VAR)) {
            jsonUint64(raw, tokens[++i], &frameRate);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_RUN_BOTH_PEERS_ENV_VAR)) {
            jsonBool(raw, tokens[++i], &runBothPeers);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) DEFAULT_REGION_ENV_VAR)) {
            jsonString(raw, tokens[++i], &region);
        } else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) DEBUG_LOG_LEVEL_ENV_VAR)) {
            jsonUint64(raw, tokens[++i], &logLevel64);
            logLevel.value = (UINT32) logLevel64.value;
            logLevel.initialized = TRUE;
        }

        // IoT credential provider related tokens
        else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) CANARY_USE_IOT_CREDENTIALS_ENV_VAR)) {
            jsonBool(raw, tokens[++i], &useIotCredentialProvider);
        }
        else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_CREDENTIAL_ENDPOINT_ENV_VAR)) {
            jsonString(raw, tokens[++i], &iotCoreCredentialEndPointFile);
            CHK_STATUS(readFile((PCHAR)iotCoreCredentialEndPointFile.value.c_str(), TRUE, NULL, &fileSize));
            CHK_ERR(fileSize != 0, STATUS_WEBRTC_EMPTY_IOT_CRED_FILE, "Empty credential file");
            CHK_STATUS(readFile((PCHAR)iotCoreCredentialEndPointFile.value.c_str(), TRUE, iotEndpoint, &fileSize));
            iotEndpoint[fileSize - 1] = '\0';
        }
        else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_CERT_ENV_VAR)) {
            jsonString(raw, tokens[++i], &iotCoreCert);
        }
        else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_PRIVATE_KEY_ENV_VAR)) {
            jsonString(raw, tokens[++i], &iotCorePrivateKey);
        }
        else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_ROLE_ALIAS_ENV_VAR)) {
            jsonString(raw, tokens[++i], &iotCoreRoleAlias);
        }
        else if (compareJsonString((PCHAR) raw, &tokens[i], JSMN_STRING, (PCHAR) IOT_CORE_THING_NAME_ENV_VAR)) {
            jsonString(raw, tokens[++i], &channelName);
        }
    }

CleanUp:
    return retStatus;
}