From: Marcin Siodelski Date: Thu, 7 Sep 2017 15:43:10 +0000 (+0200) Subject: [5305] Migrated SharedNetwork6Parser to SimpleParser. X-Git-Tag: trac5073a_base~11^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=38719d4fd9e8e7cd8b51cbaf6a86885c7f050e0a;p=thirdparty%2Fkea.git [5305] Migrated SharedNetwork6Parser to SimpleParser. --- diff --git a/src/lib/dhcpsrv/parsers/shared_network_parser.cc b/src/lib/dhcpsrv/parsers/shared_network_parser.cc index 938596dc5f..632228c2a9 100644 --- a/src/lib/dhcpsrv/parsers/shared_network_parser.cc +++ b/src/lib/dhcpsrv/parsers/shared_network_parser.cc @@ -70,42 +70,36 @@ SharedNetwork6Parser::parse(const data::ConstElementPtr& shared_network_data) { SharedNetwork6Ptr shared_network; std::string name; try { - // Shared network is a map. - const auto& element = shared_network_data->mapValue(); - // Make sure that the network name has been specified. The name is required // to create a SharedNetwork6 object. - const auto& name_it = element.find("name"); - if (name_it == element.cend()) { - isc_throw(DhcpConfigError, "parameter \"name\" must be specified for" - " a shared network"); + std::string name = getString(shared_network_data, "name"); + shared_network.reset(new SharedNetwork6(name)); + // Interface is an optional parameter + if (shared_network_data->contains("interface")) { + shared_network->setIface(getString(shared_network_data, "interface")); } - shared_network.reset(new SharedNetwork6(name_it->second->stringValue())); - - // Iterate over all parameters within the map and assign them to the - // shared network. - for (auto param = element.cbegin(); param != element.cend(); ++param) { - if (param->first == "interface") { - shared_network->setIface(param->second->stringValue()); - - } else if (param->first == "option-data") { - // Create parser instance for option-data. - CfgOptionPtr cfg_option = shared_network->getCfgOption(); - OptionDataListParser parser(AF_INET6); - parser.parse(cfg_option, param->second); - - } else if (param->first == "subnet6") { - // Create parser instance of subnet6. - Subnets6ListConfigParser parser; - Subnet6Collection subnets; - parser.parse(subnets, param->second); - - // Add all returned subnets into shared network. - for (auto subnet = subnets.cbegin(); subnet != subnets.cend(); - ++subnet) { - shared_network->add(*subnet); - } + + if (shared_network_data->contains("option-data")) { + auto json = shared_network_data->get("option-data"); + // Create parser instance for option-data. + CfgOptionPtr cfg_option = shared_network->getCfgOption(); + OptionDataListParser parser(AF_INET6); + parser.parse(cfg_option, json); + } + + if (shared_network_data->contains("subnet6")) { + auto json = shared_network_data->get("subnet6"); + + // Create parser instance of subnet6. + Subnets6ListConfigParser parser; + Subnet6Collection subnets; + parser.parse(subnets, json); + + // Add all returned subnets into shared network. + for (auto subnet = subnets.cbegin(); subnet != subnets.cend(); + ++subnet) { + shared_network->add(*subnet); } }