ResponseCode ConfigCommon::InitializeCommon()

in common/ConfigCommon.cpp [122:333]


    ResponseCode ConfigCommon::InitializeCommon(const util::String &config_file_relative_path) {
        util::String config_file_absolute_path = GetCurrentPath();
        if (0 == config_file_absolute_path.length()) {
            return ResponseCode::FILE_OPEN_ERROR;
        }

#ifdef WIN32
        config_file_absolute_path.append("\\");
#else
        config_file_absolute_path.append("/");
#endif
        config_file_absolute_path.append(config_file_relative_path);
        ResponseCode rc = util::JsonParser::InitializeFromJsonFile(sdk_config_json_, config_file_absolute_path);
        if (ResponseCode::SUCCESS != rc) {
            AWS_LOG_ERROR(LOG_TAG_SAMPLE_CONFIG_COMMON,
                          "Error in Parsing. %s\n parse error code : %d, offset : %d",
                          ResponseHelper::ToString(rc).c_str(),
                          static_cast<int>(util::JsonParser::GetParseErrorCode(sdk_config_json_)),
                          static_cast<unsigned int>(util::JsonParser::GetParseErrorOffset(sdk_config_json_)));
            return rc;
        }

        util::String temp_str;

        rc = util::JsonParser::GetStringValue(sdk_config_json_, SDK_CONFIG_ENDPOINT_KEY, endpoint_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_ENDPOINT_KEY);
            return rc;
        }

        rc = util::JsonParser::GetUint16Value(sdk_config_json_, SDK_CONFIG_ENDPOINT_MQTT_PORT_KEY, endpoint_mqtt_port_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_ENDPOINT_MQTT_PORT_KEY);
            return rc;
        }

        rc = util::JsonParser::GetUint16Value(sdk_config_json_,
                                              SDK_CONFIG_ENDPOINT_HTTPS_PORT_KEY,
                                              endpoint_https_port_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_ENDPOINT_HTTPS_PORT_KEY);
            return rc;
        }

        rc = util::JsonParser::GetUint16Value(sdk_config_json_, SDK_CONFIG_ENDPOINT_GREENGRASS_DISCOVERY_PORT_KEY,
                                              endpoint_greengrass_discovery_port_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_ENDPOINT_GREENGRASS_DISCOVERY_PORT_KEY);
            return rc;
        }

        rc = util::JsonParser::GetStringValue(sdk_config_json_, SDK_CONFIG_ROOT_CA_RELATIVE_KEY, temp_str);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_ROOT_CA_RELATIVE_KEY);
            return rc;
        }
        root_ca_path_ = GetCurrentPath();
        if (0 == root_ca_path_.length()) {
            return ResponseCode::FILE_OPEN_ERROR;
        }
        root_ca_path_.append("/");
        root_ca_path_.append(temp_str);

        rc = util::JsonParser::GetStringValue(sdk_config_json_, SDK_CONFIG_DEVICE_CERT_RELATIVE_KEY, temp_str);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_DEVICE_CERT_RELATIVE_KEY);
            return rc;
        }
        client_cert_path_ = GetCurrentPath();
        if (0 == client_cert_path_.length()) {
            return ResponseCode::FILE_OPEN_ERROR;
        }
        client_cert_path_.append("/");
        client_cert_path_.append(temp_str);

        rc = util::JsonParser::GetStringValue(sdk_config_json_, SDK_CONFIG_DEVICE_PRIVATE_KEY_RELATIVE_KEY, temp_str);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_DEVICE_PRIVATE_KEY_RELATIVE_KEY);
            return rc;
        }
        client_key_path_ = GetCurrentPath();
        if (0 == client_key_path_.length()) {
            return ResponseCode::FILE_OPEN_ERROR;
        }
        client_key_path_.append("/");
        client_key_path_.append(temp_str);

        rc = util::JsonParser::GetStringValue(sdk_config_json_, SDK_CONFIG_CLIENT_ID_KEY, base_client_id_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_CLIENT_ID_KEY);
            return rc;
        }

        rc = util::JsonParser::GetStringValue(sdk_config_json_, SDK_CONFIG_THING_NAME_KEY, thing_name_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_THING_NAME_KEY);
            return rc;
        }

        rc = util::JsonParser::GetStringValue(sdk_config_json_, SDK_CONFIG_AWS_REGION_KEY, aws_region_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_AWS_REGION_KEY);
            return rc;
        }

        rc = util::JsonParser::GetStringValue(sdk_config_json_, SDK_CONFIG_AWS_ACCESS_KEY_ID_KEY, aws_access_key_id_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_AWS_ACCESS_KEY_ID_KEY);
            return rc;
        }

        rc = util::JsonParser::GetStringValue(sdk_config_json_,
                                              SDK_CONFIG_AWS_SECRET_ACCESS_KEY,
                                              aws_secret_access_key_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_AWS_SECRET_ACCESS_KEY);
            return rc;
        }

        rc = util::JsonParser::GetStringValue(sdk_config_json_, SDK_CONFIG_AWS_SESSION_TOKEN_KEY, aws_session_token_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_AWS_SESSION_TOKEN_KEY);
            return rc;
        }

        uint32_t temp;

        rc = util::JsonParser::GetUint32Value(sdk_config_json_, SDK_CONFIG_MQTT_COMMAND_TIMEOUT_MSECS_KEY, temp);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_MQTT_COMMAND_TIMEOUT_MSECS_KEY);
            return rc;
        }
        mqtt_command_timeout_ = std::chrono::milliseconds(temp);

        rc = util::JsonParser::GetUint32Value(sdk_config_json_, SDK_CONFIG_TLS_HANDSHAKE_TIMEOUT_MSECS_KEY, temp);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_TLS_HANDSHAKE_TIMEOUT_MSECS_KEY);
            return rc;
        }
        tls_handshake_timeout_ = std::chrono::milliseconds(temp);

        rc = util::JsonParser::GetUint32Value(sdk_config_json_, SDK_CONFIG_TLS_READ_TIMEOUT_MSECS_KEY, temp);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_TLS_READ_TIMEOUT_MSECS_KEY);
            return rc;
        }
        tls_read_timeout_ = std::chrono::milliseconds(temp);

        rc = util::JsonParser::GetUint32Value(sdk_config_json_, SDK_CONFIG_TLS_WRITE_TIMEOUT_MSECS_KEY, temp);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_TLS_WRITE_TIMEOUT_MSECS_KEY);
            return rc;
        }
        tls_write_timeout_ = std::chrono::milliseconds(temp);

        rc = util::JsonParser::GetUint32Value(sdk_config_json_, SDK_CONFIG_KEEPALIVE_INTERVAL_SECS_KEY, temp);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_KEEPALIVE_INTERVAL_SECS_KEY);
            return rc;
        }
        keep_alive_timeout_secs_ = std::chrono::seconds(temp);

        rc = util::JsonParser::GetUint32Value(sdk_config_json_, SDK_CONFIG_MIN_RECONNECT_INTERVAL_SECS_KEY, temp);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_MIN_RECONNECT_INTERVAL_SECS_KEY);
            return rc;
        }
        minimum_reconnect_interval_ = std::chrono::seconds(temp);

        rc = util::JsonParser::GetUint32Value(sdk_config_json_, SDK_CONFIG_MAX_RECONNECT_INTERVAL_SECS_KEY, temp);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_MAX_RECONNECT_INTERVAL_SECS_KEY);
            return rc;
        }
        maximum_reconnect_interval_ = std::chrono::seconds(temp);

        rc = util::JsonParser::GetSizeTValue(sdk_config_json_, SDK_CONFIG_MAX_TX_ACTION_QUEUE_LENGTH_KEY,
                                             maximum_outgoing_action_queue_length_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_MAX_TX_ACTION_QUEUE_LENGTH_KEY);
            return rc;
        }

        rc = util::JsonParser::GetSizeTValue(sdk_config_json_, SDK_CONFIG_MAX_ACKS_TO_WAIT_FOR_KEY,
                                             max_pending_acks_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_MAX_ACKS_TO_WAIT_FOR_KEY);
            return rc;
        }

        rc = util::JsonParser::GetBoolValue(sdk_config_json_, SDK_CONFIG_IS_CLEAN_SESSION_KEY, is_clean_session_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_IS_CLEAN_SESSION_KEY);
            return rc;
        }

        rc = util::JsonParser::GetUint32Value(sdk_config_json_, SDK_CONFIG_ACTION_PROCESSING_RATE_KEY,
                                              action_processing_rate_hz_);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, SDK_CONFIG_ACTION_PROCESSING_RATE_KEY);
            return rc;
        }

        rc = util::JsonParser::GetUint32Value(sdk_config_json_, DISCOVER_ACTION_TIMEOUT_MSECS_KEY, temp);
        if (ResponseCode::SUCCESS != rc) {
            LogParseError(rc, sdk_config_json_, DISCOVER_ACTION_TIMEOUT_MSECS_KEY);
            return rc;
        }
        discover_action_timeout_ = std::chrono::milliseconds(temp);

        return rc;
    }