[bind10-dev] an intermediate patch for parkinglot/main.cc

JINMEI Tatuya / 神明達哉 jinmei at isc.org
Thu Oct 29 21:27:02 UTC 2009


This uses a new feature of the DNS message API and will make message
construction a bit easier.

---
JINMEI, Tatuya

Index: main.cc
===================================================================
--- main.cc	(revision 161)
+++ main.cc	(working copy)
@@ -28,14 +28,18 @@
 
 using std::string;
 using std::pair;
+using std::map;
 
 using isc::dns::RRset;
 using isc::dns::Name;
 using isc::dns::TTL;
+using isc::dns::RR;
 using isc::dns::RRsetPtr;
 using isc::dns::RRType;
 using isc::dns::RRClass;
 using isc::dns::Message;
+using isc::dns::Rdata::Rdata;
+using isc::dns::Rdata::RdataPtr;
 using isc::dns::Rdata::IN::A;
 using isc::dns::Rdata::IN::AAAA;
 using isc::dns::Rdata::Generic::NS;
@@ -88,26 +92,16 @@
 
             RRsetPtr query = msg.getSection(isc::dns::SECTION_QUESTION)[0];
             std::map<dnskey_t, string>::const_iterator it;
-            isc::dns::Rdata::RDATAPTR rdatap;
 
             it = dnsdb.find(dnskey_t(query->getName().toText(true),
                                      query->getType().toText()));
             if (it != dnsdb.end()) {
-                // XXX: this code logic is NOT clean.  should revisit API.
-                if (query->getType() == RRType::A) {
-                    rdatap = isc::dns::Rdata::RDATAPTR(new A(it->second));
-                } else if (query->getType() == RRType::AAAA) {
-                    rdatap = isc::dns::Rdata::RDATAPTR(new AAAA(it->second));
-                } else if (query->getType() == RRType::NS) {
-                    rdatap = isc::dns::Rdata::RDATAPTR(new NS(it->second));
-                }
-
-                msg.setRcode(Message::RCODE_NOERROR);
-
-                RRset* rrset = new RRset(query->getName(), query->getClass(),
-                                         query->getType(), TTL(3600));
-                rrset->addRdata(rdatap);
-                msg.addRrset(isc::dns::SECTION_ANSWER, RRsetPtr(rrset));
+                msg.addRR(isc::dns::SECTION_ANSWER,
+                          RR(query->getName(), query->getClass(),
+                             query->getType(), TTL(3600),
+                             RdataPtr(Rdata::fromText(query->getClass(),
+                                                      query->getType(),
+                                                      it->second))));
             } else {
                 msg.setRcode(Message::RCODE_NXDOMAIN);
                 // should add SOA to the authority section, but not implemented.



More information about the bind10-dev mailing list