[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