]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[4097a] Switched class iterators
authorFrancis Dupont <fdupont@isc.org>
Fri, 20 Nov 2015 15:29:10 +0000 (16:29 +0100)
committerFrancis Dupont <fdupont@isc.org>
Fri, 20 Nov 2015 15:29:10 +0000 (16:29 +0100)
src/bin/dhcp4/dhcp4_srv.cc
src/lib/dhcp/pkt.h

index d7c247aecd8eaafeef2f3e43862bb9901f4d92fa..6ae81ff63493c4e468cb7c473fd4e92d01e4cf45 100644 (file)
@@ -2371,18 +2371,19 @@ Dhcpv4Srv::classSpecificProcessing(const Dhcpv4Exchange& ex) {
         rsp->setSiaddr(IOAddress::IPV4_ZERO_ADDRESS());
     }
 
-    // Process each class
-    const ClientClassDefMapPtr& defs_ptr = CfgMgr::instance().getCurrentCfg()->
-        getClientClassDictionary()->getClasses();
-    for (ClientClassDefMap::const_iterator it = defs_ptr->begin();
-         it != defs_ptr->end(); ++it) {
-        // Is the query in this class?
-        if (!it->second || !query->inClass(it->first)) {
+    // Process each class in the packet
+    const ClientClasses& classes = query->getClasses();
+    for (ClientClasses::const_iterator cclass = classes.begin();
+         cclass != classes.end(); ++cclass) {
+        // Find the client class definition for this class
+        const ClientClassDefPtr& ccdef = CfgMgr::instance().getCurrentCfg()->
+            getClientClassDictionary()->findClass(*cclass);
+        if (!ccdef) {
+            // Not found
             continue;
         }
         // Get the configured options of this class
-        const OptionContainerPtr& options =
-            it->second->getCfgOption()->getAll("dhcp4");
+        const OptionContainerPtr& options = ccdef->getCfgOption()->getAll("dhcp4");
         if (!options || options->empty()) {
             continue;
         }
index 2c42b5cf16433d11bf61bd0a25c62e748fb41b16..51507ec186ae105127cec515ff405c87bb170536 100644 (file)
@@ -237,6 +237,12 @@ public:
     /// @param client_class name of the class to be added
     void addClass(const isc::dhcp::ClientClass& client_class);
 
+    /// @brief Returns the class set
+    ///
+    /// @note This should be used only to iterate over the class set.
+    /// @return
+    const ClientClasses& getClasses() const { return (classes_); }
+
     /// @brief Unparsed data (in received packets).
     ///
     /// @warning This public member is accessed by derived