From: Marcin Siodelski Date: Fri, 4 Jan 2013 11:58:23 +0000 (+0100) Subject: [2545] Moved config parser base classes to the headers. X-Git-Tag: bind10-1.0.0-rc-release~99^2~21^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=36622df85e6b1b7ce4fc621fbfaa21d2b35003d8;p=thirdparty%2Fkea.git [2545] Moved config parser base classes to the headers. --- diff --git a/src/bin/dhcp4/config_parser.cc b/src/bin/dhcp4/config_parser.cc index 1a5ffb65a8..ede4268679 100644 --- a/src/bin/dhcp4/config_parser.cc +++ b/src/bin/dhcp4/config_parser.cc @@ -36,25 +36,12 @@ using namespace isc::asiolink; namespace { -/// @brief Forward declaration to Dhcp4ConfigParser class. -/// -/// It is only needed here to define types that are -/// based on this class before the class definition. -class Dhcp4ConfigParser; - -/// @brief a pointer to configuration parser -typedef boost::shared_ptr ParserPtr; - -/// @brief a collection of parsers -/// -/// This container is used to store pointer to parsers for a given scope. -typedef std::vector ParserCollection; /// @brief auxiliary type used for storing element name and its parser typedef pair ConfigPair; /// @brief a factory method that will create a parser for a given element name -typedef Dhcp4ConfigParser* ParserFactory(const std::string& config_id); +typedef isc::dhcp::Dhcp4ConfigParser* ParserFactory(const std::string& config_id); /// @brief a collection of factories that creates parsers for specified element names typedef std::map FactoryMap; @@ -88,82 +75,6 @@ StringStorage string_defaults; /// @brief Global storage for options that will be used as defaults. OptionStorage option_defaults; -/// @brief Base abstract class for all DHCPv4 parsers -/// -/// Each instance of a class derived from this class parses one specific config -/// element. Sometimes elements are simple (e.g. a string) and sometimes quite -/// complex (e.g. a subnet). In such case, it is likely that a parser will -/// spawn child parsers to parse child elements in the configuration. -/// @todo: Merge this class with DhcpConfigParser in src/bin/dhcp6 -class Dhcp4ConfigParser { - /// - /// @name Constructors and Destructor - /// - /// Note: The copy constructor and the assignment operator are - /// intentionally defined as private to make it explicit that this is a - /// pure base class. - //@{ -private: - - // Private construtor and assignment operator assures that nobody - // will be able to copy or assign a parser. There are no defined - // bodies for them. - Dhcp4ConfigParser(const Dhcp4ConfigParser& source); - Dhcp4ConfigParser& operator=(const Dhcp4ConfigParser& source); -protected: - /// @brief The default constructor. - /// - /// This is intentionally defined as @c protected as this base class should - /// never be instantiated (except as part of a derived class). - Dhcp4ConfigParser() {} -public: - /// The destructor. - virtual ~Dhcp4ConfigParser() {} - //@} - - /// @brief Prepare configuration value. - /// - /// This method parses the "value part" of the configuration identifier - /// that corresponds to this derived class and prepares a new value to - /// apply to the server. - /// - /// This method must validate the given value both in terms of syntax - /// and semantics of the configuration, so that the server will be - /// validly configured at the time of @c commit(). Note: the given - /// configuration value is normally syntactically validated, but the - /// @c build() implementation must also expect invalid input. If it - /// detects an error it may throw an exception of a derived class - /// of @c isc::Exception. - /// - /// Preparing a configuration value will often require resource - /// allocation. If it fails, it may throw a corresponding standard - /// exception. - /// - /// This method is not expected to be called more than once in the - /// life of the object. Although multiple calls are not prohibited - /// by the interface, the behavior is undefined. - /// - /// @param config_value The configuration value for the identifier - /// corresponding to the derived class. - virtual void build(isc::data::ConstElementPtr config_value) = 0; - - /// @brief Apply the prepared configuration value to the server. - /// - /// This method is expected to be exception free, and, as a consequence, - /// it should normally not involve resource allocation. - /// Typically it would simply perform exception free assignment or swap - /// operation on the value prepared in @c build(). - /// In some cases, however, it may be very difficult to meet this - /// condition in a realistic way, while the failure case should really - /// be very rare. In such a case it may throw, and, if the parser is - /// called via @c configureDhcp4Server(), the caller will convert the - /// exception as a fatal error. - /// - /// This method is expected to be called after @c build(), and only once. - /// The result is undefined otherwise. - virtual void commit() = 0; -}; - /// @brief a dummy configuration parser /// /// It is a debugging parser. It does not configure anything, diff --git a/src/bin/dhcp4/config_parser.h b/src/bin/dhcp4/config_parser.h index f18d07df17..e24ae751f1 100644 --- a/src/bin/dhcp4/config_parser.h +++ b/src/bin/dhcp4/config_parser.h @@ -42,6 +42,96 @@ public: : isc::Exception(file, line, what) {} }; +/// @brief Forward declaration to Dhcp4ConfigParser class. +/// +/// It is only needed here to define types that are +/// based on this class before the class definition. +class Dhcp4ConfigParser; + +/// @brief a pointer to configuration parser +typedef boost::shared_ptr ParserPtr; + +/// @brief a collection of parsers +/// +/// This container is used to store pointer to parsers for a given scope. +typedef std::vector ParserCollection; + +/// @brief Base abstract class for all DHCPv4 parsers +/// +/// Each instance of a class derived from this class parses one specific config +/// element. Sometimes elements are simple (e.g. a string) and sometimes quite +/// complex (e.g. a subnet). In such case, it is likely that a parser will +/// spawn child parsers to parse child elements in the configuration. +/// @todo: Merge this class with DhcpConfigParser in src/bin/dhcp6 +class Dhcp4ConfigParser { + /// + /// @name Constructors and Destructor + /// + /// Note: The copy constructor and the assignment operator are + /// intentionally defined as private to make it explicit that this is a + /// pure base class. + //@{ +private: + + // Private construtor and assignment operator assures that nobody + // will be able to copy or assign a parser. There are no defined + // bodies for them. + Dhcp4ConfigParser(const Dhcp4ConfigParser& source); + Dhcp4ConfigParser& operator=(const Dhcp4ConfigParser& source); +protected: + /// @brief The default constructor. + /// + /// This is intentionally defined as @c protected as this base class should + /// never be instantiated (except as part of a derived class). + Dhcp4ConfigParser() {} +public: + /// The destructor. + virtual ~Dhcp4ConfigParser() {} + //@} + + /// @brief Prepare configuration value. + /// + /// This method parses the "value part" of the configuration identifier + /// that corresponds to this derived class and prepares a new value to + /// apply to the server. + /// + /// This method must validate the given value both in terms of syntax + /// and semantics of the configuration, so that the server will be + /// validly configured at the time of @c commit(). Note: the given + /// configuration value is normally syntactically validated, but the + /// @c build() implementation must also expect invalid input. If it + /// detects an error it may throw an exception of a derived class + /// of @c isc::Exception. + /// + /// Preparing a configuration value will often require resource + /// allocation. If it fails, it may throw a corresponding standard + /// exception. + /// + /// This method is not expected to be called more than once in the + /// life of the object. Although multiple calls are not prohibited + /// by the interface, the behavior is undefined. + /// + /// @param config_value The configuration value for the identifier + /// corresponding to the derived class. + virtual void build(isc::data::ConstElementPtr config_value) = 0; + + /// @brief Apply the prepared configuration value to the server. + /// + /// This method is expected to be exception free, and, as a consequence, + /// it should normally not involve resource allocation. + /// Typically it would simply perform exception free assignment or swap + /// operation on the value prepared in @c build(). + /// In some cases, however, it may be very difficult to meet this + /// condition in a realistic way, while the failure case should really + /// be very rare. In such a case it may throw, and, if the parser is + /// called via @c configureDhcp4Server(), the caller will convert the + /// exception as a fatal error. + /// + /// This method is expected to be called after @c build(), and only once. + /// The result is undefined otherwise. + virtual void commit() = 0; +}; + /// @brief Configure DHCPv4 server (@c Dhcpv4Srv) with a set of configuration values. /// /// This function parses configuration information stored in @c config_set diff --git a/src/bin/dhcp6/config_parser.cc b/src/bin/dhcp6/config_parser.cc index 8e9e065f0e..8a4c26c988 100644 --- a/src/bin/dhcp6/config_parser.cc +++ b/src/bin/dhcp6/config_parser.cc @@ -40,29 +40,16 @@ using namespace std; using namespace isc::data; +using namespace isc::dhcp; using namespace isc::asiolink; namespace { -/// @brief Forward declaration to DhcpConfigParser class. -/// -/// It is only needed here to define types that are -/// based on this class before the class definition. -class DhcpConfigParser; - -/// @brief a pointer to configuration parser -typedef boost::shared_ptr ParserPtr; - -/// @brief Collection of parsers. -/// -/// This container is used to store pointer to parsers for a given scope. -typedef std::vector ParserCollection; - /// @brief Auxiliary type used for storing an element name and its parser. typedef pair ConfigPair; /// @brief Factory method that will create a parser for a given element name -typedef DhcpConfigParser* ParserFactory(const std::string& config_id); +typedef isc::dhcp::DhcpConfigParser* ParserFactory(const std::string& config_id); /// @brief Collection of factories that create parsers for specified element names typedef std::map FactoryMap; @@ -98,79 +85,6 @@ StringStorage string_defaults; /// @brief Global storage for options that will be used as defaults. OptionStorage option_defaults; -/// @brief Base abstract class for all DHCPv6 parsers -/// -/// Each instance of a class derived from this class parses one specific config -/// element. Sometimes elements are simple (e.g. a string) and sometimes quite -/// complex (e.g. a subnet). In such case, it is likely that a parser will -/// spawn child parsers to parse child elements in the configuration. -/// @todo: Merge this class with Dhcp4ConfigParser in src/bin/dhcp4 -class DhcpConfigParser { - - /// @name Constructors and Destructor - /// - /// Note: The copy constructor and the assignment operator are - /// intentionally defined as private to make it explicit that this is a - /// pure base class. - //@{ -private: - DhcpConfigParser(const DhcpConfigParser& source); - DhcpConfigParser& operator=(const DhcpConfigParser& source); - -protected: - /// @brief The default constructor. - /// - /// This is intentionally defined as @c protected as this base class should - /// never be instantiated (except as part of a derived class). - DhcpConfigParser() {} -public: - /// The destructor. - virtual ~DhcpConfigParser() {} - //@} - - /// \brief Prepare configuration value. - /// - /// This method parses the "value part" of the configuration identifier - /// that corresponds to this derived class and prepares a new value to - /// apply to the server. - /// - /// This method must validate the given value both in terms of syntax - /// and semantics of the configuration, so that the server will be - /// validly configured at the time of @c commit(). Note: the given - /// configuration value is normally syntactically validated, but the - /// @c build() implementation must also expect invalid input. If it - /// detects an error it may throw an exception of a derived class - /// of @c isc::Exception. - /// - /// Preparing a configuration value will often require resource - /// allocation. If it fails, it may throw a corresponding standard - /// exception. - /// - /// This method is not expected to be called more than once in the - /// life of the object. Although multiple calls are not prohibited - /// by the interface, the behavior is undefined. - /// - /// @param config_value The configuration value for the identifier - /// corresponding to the derived class. - virtual void build(isc::data::ConstElementPtr config_value) = 0; - - /// @brief Apply the prepared configuration value to the server. - /// - /// This method is expected to be exception free, and, as a consequence, - /// it should normally not involve resource allocation. - /// Typically it would simply perform exception free assignment or swap - /// operation on the value prepared in @c build(). - /// In some cases, however, it may be very difficult to meet this - /// condition in a realistic way, while the failure case should really - /// be very rare. In such a case it may throw, and, if the parser is - /// called via @c configureDhcp6Server(), the caller will convert the - /// exception as a fatal error. - /// - /// This method is expected to be called after @c build(), and only once. - /// The result is undefined otherwise. - virtual void commit() = 0; -}; - /// @brief a dummy configuration parser /// /// This is a debugging parser. It does not configure anything, diff --git a/src/bin/dhcp6/config_parser.h b/src/bin/dhcp6/config_parser.h index 8b4085153f..5394edecfc 100644 --- a/src/bin/dhcp6/config_parser.h +++ b/src/bin/dhcp6/config_parser.h @@ -41,6 +41,93 @@ public: : isc::Exception(file, line, what) {} }; +/// @brief Forward declaration to DhcpConfigParser class. +/// +/// It is only needed here to define types that are +/// based on this class before the class definition. +class DhcpConfigParser; + +/// @brief a pointer to configuration parser +typedef boost::shared_ptr ParserPtr; + +/// @brief Collection of parsers. +/// +/// This container is used to store pointer to parsers for a given scope. +typedef std::vector ParserCollection; + +/// @brief Base abstract class for all DHCPv6 parsers +/// +/// Each instance of a class derived from this class parses one specific config +/// element. Sometimes elements are simple (e.g. a string) and sometimes quite +/// complex (e.g. a subnet). In such case, it is likely that a parser will +/// spawn child parsers to parse child elements in the configuration. +/// @todo: Merge this class with Dhcp4ConfigParser in src/bin/dhcp4 +class DhcpConfigParser { + + /// @name Constructors and Destructor + /// + /// Note: The copy constructor and the assignment operator are + /// intentionally defined as private to make it explicit that this is a + /// pure base class. + //@{ +private: + DhcpConfigParser(const DhcpConfigParser& source); + DhcpConfigParser& operator=(const DhcpConfigParser& source); + +protected: + /// @brief The default constructor. + /// + /// This is intentionally defined as @c protected as this base class should + /// never be instantiated (except as part of a derived class). + DhcpConfigParser() {} +public: + /// The destructor. + virtual ~DhcpConfigParser() {} + //@} + + /// \brief Prepare configuration value. + /// + /// This method parses the "value part" of the configuration identifier + /// that corresponds to this derived class and prepares a new value to + /// apply to the server. + /// + /// This method must validate the given value both in terms of syntax + /// and semantics of the configuration, so that the server will be + /// validly configured at the time of @c commit(). Note: the given + /// configuration value is normally syntactically validated, but the + /// @c build() implementation must also expect invalid input. If it + /// detects an error it may throw an exception of a derived class + /// of @c isc::Exception. + /// + /// Preparing a configuration value will often require resource + /// allocation. If it fails, it may throw a corresponding standard + /// exception. + /// + /// This method is not expected to be called more than once in the + /// life of the object. Although multiple calls are not prohibited + /// by the interface, the behavior is undefined. + /// + /// @param config_value The configuration value for the identifier + /// corresponding to the derived class. + virtual void build(isc::data::ConstElementPtr config_value) = 0; + + /// @brief Apply the prepared configuration value to the server. + /// + /// This method is expected to be exception free, and, as a consequence, + /// it should normally not involve resource allocation. + /// Typically it would simply perform exception free assignment or swap + /// operation on the value prepared in @c build(). + /// In some cases, however, it may be very difficult to meet this + /// condition in a realistic way, while the failure case should really + /// be very rare. In such a case it may throw, and, if the parser is + /// called via @c configureDhcp6Server(), the caller will convert the + /// exception as a fatal error. + /// + /// This method is expected to be called after @c build(), and only once. + /// The result is undefined otherwise. + virtual void commit() = 0; +}; + /// @brief Configures DHCPv6 server /// /// This function is called every time a new configuration is received. The extra