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], ®ion);
} 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;
}