// Parse Host Reservations for this subnet if any.
ConstElementPtr reservations = subnet->get("reservations");
if (reservations) {
- ParserPtr parser(new HostReservationsListParser<
- HostReservationParser4>(subnet_->getID()));
- parser->build(reservations);
+ HostReservationsListParser<HostReservationParser4>
+ parser(subnet_->getID());
+ parser.parse(reservations);
}
}
parser = new ExpirationConfigParser();
} else if (config_id.compare("client-classes") == 0) {
parser = new ClientClassDefListParser(config_id, globalContext());
- } else if (config_id.compare("host-reservation-identifiers") == 0) {
- parser = new HostReservationIdsParser4();
+ // host-reservation-identifiers have been converted to SimpleParser already.
} else {
isc_throw(DhcpConfigError,
"unsupported global configuration parameter: "
continue;
}
+ if (config_pair.first == "host-reservation-identifiers") {
+ HostReservationIdsParser4 parser;
+ parser.parse(config_pair.second);
+ continue;
+ }
+
ParserPtr parser(createGlobalDhcp4ConfigParser(config_pair.first,
config_pair.second));
LOG_DEBUG(dhcp4_logger, DBG_DHCP4_DETAIL, DHCP4_PARSER_CREATED)
// Parse Host Reservations for this subnet if any.
ConstElementPtr reservations = subnet->get("reservations");
if (reservations) {
- ParserPtr parser(new HostReservationsListParser<
- HostReservationParser6>(subnet_->getID()));
- parser->build(reservations);
+ HostReservationsListParser<HostReservationParser6>
+ parser(subnet_->getID());
+ parser.parse(reservations);
}
}
}
parser = new ClientClassDefListParser(config_id, globalContext());
} else if (config_id.compare("server-id") == 0) {
parser = new DUIDConfigParser();
- } else if (config_id.compare("host-reservation-identifiers") == 0) {
- parser = new HostReservationIdsParser6();
+ // host-reservation-identifiers have been converted to SimpleParser already.
} else {
isc_throw(DhcpConfigError,
"unsupported global configuration parameter: "
continue;
}
+ if (config_pair.first == "host-reservation-identifiers") {
+ HostReservationIdsParser6 parser;
+ parser.parse(config_pair.second);
+ continue;
+ }
+
ParserPtr parser(createGlobal6DhcpConfigParser(config_pair.first,
config_pair.second));
LOG_DEBUG(dhcp6_logger, DBG_DHCP6_DETAIL, DHCP6_PARSER_CREATED)
-// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
namespace dhcp {
HostReservationParser::HostReservationParser(const SubnetID& subnet_id)
- : DhcpConfigParser(), subnet_id_(subnet_id) {
+ : SimpleParser(), subnet_id_(subnet_id) {
+}
+
+
+void
+HostReservationParser::parse(isc::data::ConstElementPtr reservation_data) {
+ parseInternal(reservation_data);
}
void
-HostReservationParser::build(isc::data::ConstElementPtr reservation_data) {
+HostReservationParser::parseInternal(isc::data::ConstElementPtr reservation_data) {
std::string identifier;
std::string identifier_name;
std::string hostname;
}
void
-HostReservationParser4::build(isc::data::ConstElementPtr reservation_data) {
- HostReservationParser::build(reservation_data);
+HostReservationParser4::parseInternal(isc::data::ConstElementPtr reservation_data) {
+ HostReservationParser::parseInternal(reservation_data);
host_->setIPv4SubnetID(subnet_id_);
}
void
-HostReservationParser6::build(isc::data::ConstElementPtr reservation_data) {
- HostReservationParser::build(reservation_data);
+HostReservationParser6::parseInternal(isc::data::ConstElementPtr reservation_data) {
+ HostReservationParser::parseInternal(reservation_data);
host_->setIPv6SubnetID(subnet_id_);
}
void
-HostReservationIdsParser::build(isc::data::ConstElementPtr ids_list) {
+HostReservationIdsParser::parse(isc::data::ConstElementPtr ids_list) {
+ parseInternal(ids_list);
+}
+
+void
+HostReservationIdsParser::parseInternal(isc::data::ConstElementPtr ids_list) {
// Remove existing identifier types.
staging_cfg_->clearIdentifierTypes();
-// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
#define HOST_RESERVATION_PARSER_H
#include <cc/data.h>
+#include <cc/simple_parser.h>
#include <dhcpsrv/host.h>
-#include <dhcpsrv/parsers/dhcp_config_parser.h>
namespace isc {
namespace dhcp {
/// @brief Parser for a single host reservation entry.
-class HostReservationParser : public DhcpConfigParser {
+class HostReservationParser : public isc::data::SimpleParser {
public:
/// @brief Constructor.
///
/// @param subnet_id Identifier of the subnet that the host is
/// connected to.
- HostReservationParser(const SubnetID& subnet_id);
+ explicit HostReservationParser(const SubnetID& subnet_id);
+
+ /// @brief Destructor.
+ virtual ~HostReservationParser() { }
/// @brief Parses a single entry for host reservation.
///
/// reservation configuration.
///
/// @throw DhcpConfigError If the configuration is invalid.
- virtual void build(isc::data::ConstElementPtr reservation_data);
-
- /// @brief Commit, unused.
- virtual void commit() { }
+ void parse(isc::data::ConstElementPtr reservation_data);
protected:
+ /// @brief Parses a single entry for host reservation.
+ ///
+ /// This method is called by @ref parse and it can be overriden in the
+ /// derived classes to provide class specific parsing logic.
+ ///
+ /// @param reservation_data Data element holding map with a host
+ /// reservation configuration.
+ ///
+ /// @throw DhcpConfigError If the configuration is invalid.
+ virtual void parseInternal(isc::data::ConstElementPtr reservation_data);
+
/// @brief Inserts @c host_ object to the staging configuration.
///
/// This method should be called by derived classes to insert the fully
/// connected to.
HostReservationParser4(const SubnetID& subnet_id);
+protected:
+
/// @brief Parses a single host reservation for DHCPv4.
///
/// @param reservation_data Data element holding map with a host
/// reservation configuration.
///
/// @throw DhcpConfigError If the configuration is invalid.
- virtual void build(isc::data::ConstElementPtr reservation_data);
-
-protected:
+ virtual void parseInternal(isc::data::ConstElementPtr reservation_data);
/// @brief Returns set of the supported parameters for DHCPv4.
///
/// @return Set of supported parameter names.
virtual const std::set<std::string>&
getSupportedParameters(const bool identifiers_only) const;
-
};
/// @brief Parser for a single host reservation for DHCPv6.
/// connected to.
HostReservationParser6(const SubnetID& subnet_id);
+protected:
+
/// @brief Parses a single host reservation for DHCPv6.
///
/// @param reservation_data Data element holding map with a host
/// reservation configuration.
///
/// @throw DhcpConfigError If the configuration is invalid.
- virtual void build(isc::data::ConstElementPtr reservation_data);
-
-protected:
+ virtual void parseInternal(isc::data::ConstElementPtr reservation_data);
/// @brief Returns set of the supported parameters for DHCPv6.
///
/// This is a parent parser class for parsing "host-reservation-identifiers"
/// global configuration parmeter. The DHCPv4 and DHCPv6 specific parsers
/// derive from this class.
-class HostReservationIdsParser : public DhcpConfigParser {
+class HostReservationIdsParser : public isc::data::SimpleParser {
public:
/// @brief Constructor.
HostReservationIdsParser();
+ /// @brief Destructor.
+ virtual ~HostReservationIdsParser() { }
+
/// @brief Parses a list of host identifiers.
///
/// @param ids_list Data element pointing to an ordered list of host
/// identifier names.
///
/// @throw DhcpConfigError If specified configuration is invalid.
- virtual void build(isc::data::ConstElementPtr ids_list);
-
- /// @brief Commit, unused.
- virtual void commit() { }
+ void parse(isc::data::ConstElementPtr ids_list);
protected:
+ /// @brief Parses a list of host identifiers.
+ ///
+ /// This method is called by @ref parse and it can be overriden in the
+ /// derived classes to provide class specific parsing logic.
+ ///
+ /// @param ids_list Data element pointing to an ordered list of host
+ /// identifier names.
+ ///
+ /// @throw DhcpConfigError If specified configuration is invalid.
+ virtual void parseInternal(isc::data::ConstElementPtr ids_list);
+
/// @brief Checks if specified identifier name is supported in the
/// context of the parser.
///
-// Copyright (C) 2014-2015 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
#define HOST_RESERVATIONS_LIST_PARSER_H
#include <cc/data.h>
+#include <cc/simple_parser.h>
#include <dhcpsrv/subnet_id.h>
-#include <dhcpsrv/parsers/dhcp_config_parser.h>
#include <boost/foreach.hpp>
namespace isc {
/// parse individual reservations: @c HostReservationParser4 or
/// @c HostReservationParser6.
template<typename HostReservationParserType>
-class HostReservationsListParser : public DhcpConfigParser {
+class HostReservationsListParser : public isc::data::SimpleParser {
public:
/// @brief Constructor.
///
/// @throw DhcpConfigError If the configuration if any of the reservations
/// is invalid.
- virtual void build(isc::data::ConstElementPtr hr_list) {
+ void parse(isc::data::ConstElementPtr hr_list) {
BOOST_FOREACH(data::ConstElementPtr reservation, hr_list->listValue()) {
- ParserPtr parser(new HostReservationParserType(subnet_id_));
- parser->build(reservation);
+ HostReservationParserType parser(subnet_id_);
+ parser.parse(reservation);
}
}
- /// @brief Commit, unused.
- virtual void commit() { }
-
private:
/// @brief Identifier of the subnet to whic the reservations belong.
-// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
#include <dhcp/option6_addrlst.h>
#include <dhcpsrv/cfgmgr.h>
#include <dhcpsrv/host.h>
+#include <dhcpsrv/parsers/dhcp_parsers.h>
#include <dhcpsrv/parsers/host_reservation_parser.h>
#include <dhcpsrv/testutils/config_result_check.h>
#include <boost/pointer_cast.hpp>
ElementPtr config_element = Element::fromJSON(config);
ParserType parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
// Retrieve a host.
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config.str());
HostReservationParser4 parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
void testInvalidConfig(const std::string& config) const {
ElementPtr config_element = Element::fromJSON(config);
ParserType parser(SubnetID(10));
- EXPECT_THROW(parser.build(config_element), DhcpConfigError);
+ EXPECT_THROW(parser.parse(config_element), DhcpConfigError);
}
/// @brief HW Address object used by tests.
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser4 parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser4 parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser4 parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser4 parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser6 parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser6 parser(SubnetID(12));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser6 parser(SubnetID(12));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser6 parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser4 parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config);
HostReservationParser6 parser(SubnetID(10));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
// One host should have been added to the configuration.
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
void testInvalidConfig(const std::string& config) const {
ElementPtr config_element = Element::fromJSON(config);
ParserType parser;
- EXPECT_THROW(parser.build(config_element), DhcpConfigError);
+ EXPECT_THROW(parser.parse(config_element), DhcpConfigError);
}
};
ElementPtr config_element = Element::fromJSON(config);
HostReservationIdsParser4 parser;
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
ConstCfgHostOperationsPtr cfg = CfgMgr::instance().getStagingCfg()->
getCfgHostOperations4();
ElementPtr config_element = Element::fromJSON(config);
HostReservationIdsParser6 parser;
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
ConstCfgHostOperationsPtr cfg = CfgMgr::instance().getStagingCfg()->
getCfgHostOperations6();
ElementPtr config_element = Element::fromJSON(config);
HostReservationIdsParser4 parser;
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
ConstCfgHostOperationsPtr cfg = CfgMgr::instance().getStagingCfg()->
getCfgHostOperations4();
ElementPtr config_element = Element::fromJSON(config);
HostReservationIdsParser6 parser;
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
ConstCfgHostOperationsPtr cfg = CfgMgr::instance().getStagingCfg()->
getCfgHostOperations6();
-// Copyright (C) 2014-2016 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
#include <dhcpsrv/cfg_hosts.h>
#include <dhcpsrv/host.h>
#include <dhcpsrv/subnet_id.h>
+#include <dhcpsrv/parsers/dhcp_parsers.h>
#include <dhcpsrv/parsers/host_reservation_parser.h>
#include <dhcpsrv/parsers/host_reservations_list_parser.h>
#include <gtest/gtest.h>
ElementPtr config_element = Element::fromJSON(config);
HostReservationsListParser<HostReservationParser4> parser(SubnetID(1));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config.str());
HostReservationsListParser<HostReservationParser4> parser(SubnetID(1));
- EXPECT_THROW(parser.build(config_element), DhcpConfigError);
+ EXPECT_THROW(parser.parse(config_element), DhcpConfigError);
}
}
// Parse configuration.
HostReservationsListParser<HostReservationParser6> parser(SubnetID(2));
- ASSERT_NO_THROW(parser.build(config_element));
+ ASSERT_NO_THROW(parser.parse(config_element));
CfgHostsPtr cfg_hosts = CfgMgr::instance().getStagingCfg()->getCfgHosts();
HostCollection hosts;
ElementPtr config_element = Element::fromJSON(config.str());
HostReservationsListParser<HostReservationParser6> parser(SubnetID(1));
- EXPECT_THROW(parser.build(config_element), DhcpConfigError);
+ EXPECT_THROW(parser.parse(config_element), DhcpConfigError);
}
}