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;
}