ResponseCode DiscoveryResponse::GetParsedResponse()

in src/discovery/DiscoveryResponse.cpp [66:142]


	ResponseCode DiscoveryResponse::GetParsedResponse(util::Vector<ConnectivityInfo> &connectivity_info_list,
													  util::Map<util::String,
																util::Vector<util::String>> &root_ca_map) {
		util::String group_name;
		util::String core_name;
		util::String ca_string;
		util::String id;
		util::String host_name;
		util::String metadata;
		uint16_t port;
		ResponseCode parsing_response = ResponseCode::SUCCESS;

		const char *group_array_key = GROUP_ARRAY_KEY.c_str();
		const char *group_id_key = GROUP_ID_KEY.c_str();
		const char *ggc_array_key = GGC_ARRAY_KEY.c_str();
		const char *root_ca_key = ROOT_CA_KEY.c_str();
		const char *connectivity_info_array_key = CONNECTIVITY_INFO_ARRAY_KEY.c_str();
		const char *id_key = ID_KEY.c_str();
		const char *host_address_key = HOST_ADDRESS_KEY.c_str();
		const char *port_key = PORT_KEY.c_str();
		const char *metadata_key = METADATA_KEY.c_str();
		const char *ggc_thing_arn_key = GGC_THING_ARN_KEY.c_str();

		for (auto &group_itr : response_document_[group_array_key].GetArray()) {
			if (!group_itr.HasMember(group_id_key)
				|| !group_itr.HasMember(ggc_array_key)
				|| !group_itr.HasMember(root_ca_key)) {
				parsing_response = ResponseCode::DISCOVER_RESPONSE_UNEXPECTED_JSON_STRUCTURE_ERROR;
				break;
			}

			group_name = util::String(group_itr[group_id_key].GetString());

			for (auto &core_itr : group_itr[ggc_array_key].GetArray()) {
				if (!core_itr.HasMember(ggc_thing_arn_key)
					|| !core_itr.HasMember(connectivity_info_array_key)) {
					parsing_response = ResponseCode::DISCOVER_RESPONSE_UNEXPECTED_JSON_STRUCTURE_ERROR;
					break;
				}
				core_name = util::String(core_itr[ggc_thing_arn_key].GetString());
				for (auto &connectivity_info_itr : core_itr[connectivity_info_array_key].GetArray()) {
					if (!connectivity_info_itr.HasMember(id_key)
						|| !connectivity_info_itr.HasMember(host_address_key)
						|| !connectivity_info_itr.HasMember(port_key)) {
						parsing_response = ResponseCode::DISCOVER_RESPONSE_UNEXPECTED_JSON_STRUCTURE_ERROR;
						break;
					}

					id = util::String(connectivity_info_itr[id_key].GetString());

					host_name = util::String(connectivity_info_itr[host_address_key].GetString());

					if (connectivity_info_itr.HasMember(metadata_key)) {
						metadata = util::String(connectivity_info_itr[metadata_key].GetString());
					} else {
						metadata = util::String("");
					}

					port = static_cast<uint16_t>(connectivity_info_itr[port_key].GetInt());

					ConnectivityInfo connectivity_info(group_name, core_name, id, host_name, port, metadata);

					connectivity_info_list.push_back(connectivity_info);
					util::Vector<util::String> ca_list;
					for (auto &ca_itr : group_itr[root_ca_key].GetArray()) {
						ca_string = util::String(ca_itr.GetString());
						ca_list.push_back(ca_string);
					}
					root_ca_map.insert(std::pair<util::String, util::Vector<util::String>>(group_name, ca_list));
				}
			}
			if (ResponseCode::SUCCESS != parsing_response) {
				break;
			}
		}
		return parsing_response;
	}