]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Clean up QTag code 6279/head
authorChris Hofstaedtler <chris.hofstaedtler@deduktiva.com>
Mon, 19 Feb 2018 13:50:00 +0000 (14:50 +0100)
committerChris Hofstaedtler <chris.hofstaedtler@deduktiva.com>
Mon, 19 Feb 2018 13:51:35 +0000 (14:51 +0100)
pdns/dnsdist-lua-actions.cc
pdns/dnsdist-lua-bindings-dnsquestion.cc
pdns/dnsdist-lua-rules.cc
pdns/dnsdist.hh

index 1dc577821821eddf150d7b42e1039f9b8d97f2f2..8d25ae8742f45917a8eee1b10bbdae99a4f86ce1 100644 (file)
@@ -693,16 +693,16 @@ private:
 class TagAction : public DNSAction
 {
 public:
-  TagAction(const std::string tag, std::string value): d_tag(tag), d_value(value)
+  TagAction(const std::string tag, const std::string value): d_tag(tag), d_value(value)
   {
   }
   DNSAction::Action operator()(DNSQuestion* dq, string* ruleresult) const override
   {
-    if (dq->qTag == nullptr) {
+    if (!dq->qTag) {
       dq->qTag = std::make_shared<QTag>();
     }
 
-    dq->qTag->add(d_tag, d_value);
+    dq->qTag->insert({d_tag, d_value});
 
     return Action::None;
   }
@@ -854,16 +854,16 @@ private:
 class TagResponseAction : public DNSResponseAction
 {
 public:
-  TagResponseAction(const std::string tag, std::string value): d_tag(tag), d_value(value)
+  TagResponseAction(const std::string tag, const std::string value): d_tag(tag), d_value(value)
   {
   }
   DNSResponseAction::Action operator()(DNSResponse* dr, string* ruleresult) const override
   {
-    if (dr->qTag == nullptr) {
+    if (!dr->qTag) {
       dr->qTag = std::make_shared<QTag>();
     }
 
-    dr->qTag->add(d_tag, d_value);
+    dr->qTag->insert({d_tag, d_value});
 
     return Action::None;
   }
index dcd47fff21364ec34964d07123e8aca076964860..9c033bbae6069eef123884ebe4ea7b473a8426bb 100644 (file)
@@ -62,40 +62,39 @@ void setupLuaBindingsDNSQuestion()
 #endif /* HAVE_NET_SNMP */
     });
   g_lua.registerFunction<void(DNSQuestion::*)(std::string, std::string)>("setTag", [](DNSQuestion& dq, const std::string& strLabel, const std::string& strValue) {
-
       if(dq.qTag == nullptr) {
         dq.qTag = std::make_shared<QTag>();
       }
-      dq.qTag->add(strLabel, strValue);
-
+      dq.qTag->insert({strLabel, strValue});
     });
   g_lua.registerFunction<void(DNSQuestion::*)(vector<pair<string, string>>)>("setTagArray", [](DNSQuestion& dq, const vector<pair<string, string>>&tags) {
-
-      if(dq.qTag == nullptr) {
+      if (!dq.qTag) {
         dq.qTag = std::make_shared<QTag>();
       }
 
       for (const auto& tag : tags) {
-        dq.qTag->add(tag.first, tag.second);
+        dq.qTag->insert({tag.first, tag.second});
       }
-
     });
   g_lua.registerFunction<string(DNSQuestion::*)(std::string)>("getTag", [](const DNSQuestion& dq, const std::string& strLabel) {
+      if (!dq.qTag) {
+        return string();
+      }
 
       std::string strValue;
-      if(dq.qTag != nullptr) {
-        strValue = dq.qTag->getMatch(strLabel);
+      const auto it = dq.qTag->find(strLabel);
+      if (it == dq.qTag->cend()) {
+        return string();
       }
-      return strValue;
+      return it->second;
     });
-  g_lua.registerFunction<std::unordered_map<string, string>(DNSQuestion::*)(void)>("getTagArray", [](const DNSQuestion& dq) {
-
-      if(dq.qTag != nullptr) {
-        return dq.qTag->tagData;
-      } else {
-        std::unordered_map<string, string> XX;
-        return XX;
+  g_lua.registerFunction<QTag(DNSQuestion::*)(void)>("getTagArray", [](const DNSQuestion& dq) {
+      if (!dq.qTag) {
+        QTag empty;
+        return empty;
       }
+
+      return *dq.qTag;
     });
 
   /* LuaWrapper doesn't support inheritance */
index 42734bd987dae8cf144a5d6df600f68f6011d2f6..9ae95466deaebc4c23bd94dc44fa9d79b6e0bb49 100644 (file)
@@ -831,12 +831,12 @@ public:
   }
   bool matches(const DNSQuestion* dq) const override
   {
-    if (dq->qTag == nullptr) {
+    if (!dq->qTag) {
       return false;
     }
 
-    const auto got = dq->qTag->tagData.find(d_tag);
-    if (got == dq->qTag->tagData.cend()) {
+    const auto it = dq->qTag->find(d_tag);
+    if (it == dq->qTag->cend()) {
       return false;
     }
 
@@ -844,7 +844,7 @@ public:
       return true;
     }
 
-    return got->second == *d_value;
+    return it->second == *d_value;
   }
 
   string toString() const override
index b8d7111282a96d357e90cda7ba4609dedab5d9f7..1bd3eedf44802d7abacc33992c33d49ad39b8ea5 100644 (file)
@@ -53,77 +53,10 @@ extern uint16_t g_ECSSourcePrefixV4;
 extern uint16_t g_ECSSourcePrefixV6;
 extern bool g_ECSOverride;
 
-class QTag
-{
-public:
-  QTag()
-  {
-  }
-
-  ~QTag()
-  {
-  }
-
-  void add(const std::string& strLabel, const std::string& strValue)
-  {
-    tagData.insert({strLabel, strValue});
-    return;
-  }
-
-  std::string getMatch(const std::string& strLabel)  const
-  {
-    const auto got = tagData.find(strLabel);
-    if (got == tagData.cend()) {
-      return "";
-    }
-
-    return got->second;
-  }
-
-  std::string getEntry(size_t iEntry) const
-  {
-    std::string strEntry;
-    size_t iCounter = 0;
-
-    for (const auto& itr : tagData) {
-      iCounter++;
-      if(iCounter == iEntry) {
-        strEntry = itr.first;
-        strEntry += strSep;
-        strEntry += itr.second;
-        break;
-      }
-    }
-
-    return strEntry;
-  }
-
-  size_t count() const
-  {
-    return tagData.size();
-  }
-
-  std::string dumpString() const
-  {
-    std::string strRet;
-
-    for (const auto& itr : tagData) {
-      strRet += itr.first;
-      strRet += strSep;
-      strRet += itr.second;
-      strRet += "\n";
-    }
-    return strRet;
-  }
-
-  std::unordered_map<std::string, std::string> tagData;
-
-private:
-  static constexpr char const *strSep = "\t";
-};
-
 extern thread_local boost::uuids::random_generator t_uuidGenerator;
 
+typedef std::unordered_map<string, string> QTag;
+
 struct DNSQuestion
 {
   DNSQuestion(const DNSName* name, uint16_t type, uint16_t class_, const ComboAddress* lc, const ComboAddress* rem, struct dnsheader* header, size_t bufferSize, uint16_t queryLen, bool isTcp, const struct timespec* queryTime_):
@@ -137,7 +70,7 @@ struct DNSQuestion
   const uint16_t qclass;
   const ComboAddress* local;
   const ComboAddress* remote;
-  std::shared_ptr<QTag> qTag;
+  std::shared_ptr<QTag> qTag{nullptr};
   struct dnsheader* dh;
   size_t size;
   uint16_t len;