]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
add makeunique to mastermakt
authorbert hubert <bert.hubert@powerdns.com>
Fri, 2 Oct 2015 13:11:31 +0000 (15:11 +0200)
committerbert hubert <bert.hubert@powerdns.com>
Fri, 2 Oct 2015 13:11:42 +0000 (15:11 +0200)
pdns/dnsparser.cc
pdns/dnsparser.hh

index d1752d3b3ed7ac915701f2bf129082c71daa4b39..b2b67b4f5509b6e254db1b4850b8a69b5b5f3ed6 100644 (file)
@@ -164,6 +164,18 @@ DNSRecordContent* DNSRecordContent::mastermake(uint16_t qtype, uint16_t qclass,
   return i->second(content);
 }
 
+std::unique_ptr<DNSRecordContent> DNSRecordContent::makeunique(uint16_t qtype, uint16_t qclass,
+                                               const string& content)
+{
+  zmakermap_t::const_iterator i=getZmakermap().find(make_pair(qclass, qtype));
+  if(i==getZmakermap().end()) {
+    return std::unique_ptr<DNSRecordContent>(new UnknownRecordContent(content));
+  }
+
+  return std::unique_ptr<DNSRecordContent>(i->second(content));
+}
+
+
 DNSRecordContent* DNSRecordContent::mastermake(const DNSRecord &dr, PacketReader& pr, uint16_t oc) {
   // For opcode UPDATE and where the DNSRecord is an answer record, we don't care about content, because this is
   // not used within the prerequisite section of RFC2136, so - we can simply use unknownrecordcontent.
index 2a3e26986b9b4f96f20e9c7c76d5656a03f01345..4a120579320233a0900bd7bbfc3166ddab793574 100644 (file)
@@ -162,6 +162,7 @@ public:
   static DNSRecordContent* mastermake(const DNSRecord &dr, PacketReader& pr);
   static DNSRecordContent* mastermake(const DNSRecord &dr, PacketReader& pr, uint16_t opcode);
   static DNSRecordContent* mastermake(uint16_t qtype, uint16_t qclass, const string& zone);
+  static std::unique_ptr<DNSRecordContent> makeunique(uint16_t qtype, uint16_t qclass, const string& content);
 
   virtual std::string getZoneRepresentation() const = 0;
   virtual ~DNSRecordContent() {}