[svn] commit: r535 - in /branches/parkinglot/src/bin/parkinglot: Makefile.am data_source.cc data_source.h data_source_plot.cc data_source_plot.h main.cc parkinglot.cc zoneset.h

BIND 10 source code commits bind10-changes at lists.isc.org
Tue Jan 26 23:10:10 UTC 2010


Author: jinmei
Date: Tue Jan 26 23:10:10 2010
New Revision: 535

Log:
made it compile with the latest DNS message lib
(not tested yet)

Added:
    branches/parkinglot/src/bin/parkinglot/data_source.cc
    branches/parkinglot/src/bin/parkinglot/data_source.h
Modified:
    branches/parkinglot/src/bin/parkinglot/Makefile.am
    branches/parkinglot/src/bin/parkinglot/data_source_plot.cc
    branches/parkinglot/src/bin/parkinglot/data_source_plot.h
    branches/parkinglot/src/bin/parkinglot/main.cc
    branches/parkinglot/src/bin/parkinglot/parkinglot.cc
    branches/parkinglot/src/bin/parkinglot/zoneset.h

Modified: branches/parkinglot/src/bin/parkinglot/Makefile.am
==============================================================================
--- branches/parkinglot/src/bin/parkinglot/Makefile.am (original)
+++ branches/parkinglot/src/bin/parkinglot/Makefile.am Tue Jan 26 23:10:10 2010
@@ -4,6 +4,7 @@
 parkinglot_SOURCES = common.cc common.h zoneset.h zoneset.cc parkinglot.cc
 parkinglot_SOURCES += parkinglot.h main.cc
 parkinglot_SOURCES += data_source_plot.h data_source_plot.cc
-parkinglot_LDADD =  $(top_srcdir)/src/lib/dns/libdns.a
+parkinglot_SOURCES += data_source.h data_source.cc
+parkinglot_LDADD =  $(top_srcdir)/src/lib/dns/cpp/.libs/libdns.a
 parkinglot_LDADD += $(top_srcdir)/src/lib/config/cpp/libclient.a
 parkinglot_LDADD += $(top_srcdir)/src/lib/cc/cpp/libcc.a

Modified: branches/parkinglot/src/bin/parkinglot/data_source_plot.cc
==============================================================================
--- branches/parkinglot/src/bin/parkinglot/data_source_plot.cc (original)
+++ branches/parkinglot/src/bin/parkinglot/data_source_plot.cc Tue Jan 26 23:10:10 2010
@@ -1,5 +1,7 @@
 
 #include <boost/foreach.hpp>
+
+#include <dns/cpp/rrttl.h>
 
 #include "data_source_plot.h"
 
@@ -10,8 +12,7 @@
 // and does not allow update statements
 
 using namespace isc::dns;
-using namespace isc::dns::Rdata::IN;
-using namespace isc::dns::Rdata::Generic;
+using namespace isc::dns::rdata;
 using namespace isc::data;
 
 void
@@ -21,21 +22,21 @@
 
 void
 DataSourceParkingLot::addARecord(std::string data) {
-    a_records.push_back(Rdata::RdataPtr(new A(data)));
+    a_records.push_back(RdataPtr(new in::A(data)));
 }
 
 void
 DataSourceParkingLot::addAAAARecord(std::string data) {
-    aaaa_records.push_back(Rdata::RdataPtr(new AAAA(data)));
+    aaaa_records.push_back(RdataPtr(new in::AAAA(data)));
 }
 
 void
 DataSourceParkingLot::addNSRecord(std::string data) {
-    ns_records.push_back(Rdata::RdataPtr(new NS(data)));
+    ns_records.push_back(RdataPtr(new generic::NS(data)));
 }
 
 void
-DataSourceParkingLot::setSOARecord(isc::dns::Rdata::RdataPtr soa_record) {
+DataSourceParkingLot::setSOARecord(RdataPtr soa_record) {
 }
 
 void
@@ -53,8 +54,9 @@
 
 DataSourceParkingLot::DataSourceParkingLot() {
     setDefaultZoneData();
-    soa = Rdata::RdataPtr(new SOA("parking.example", "noc.parking.example",
-                                        1, 1800, 900, 604800, TTL(86400)));
+    soa = RdataPtr(new generic::SOA(Name("parking.example"),
+                                    Name("noc.parking.example"),
+                                    1, 1800, 900, 604800, 86400));
 }
 
 bool
@@ -72,28 +74,32 @@
     Name authors_name("authors.bind");
     Name version_name("version.bind");
     
-    if (clas == RRClass::CH) {
-        if (type == RRType::TXT) {
+    if (clas == RRClass::CH()) {
+        if (type == RRType::TXT()) {
             if (name == authors_name) {
-                RRsetPtr rrset = RRsetPtr(new RRset(authors_name, RRClass::CH, RRType::TXT, TTL(3600)));
-                rrset->addRdata(Rdata::RdataPtr(TXT("JINMEI Tatuya").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("Han Feng").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("Kazunori Fujiwara").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("Michael Graff").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("Evan Hunt").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("Jelte Jansen").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("Jin Jian").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("JINMEI Tatuya").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("Naoki Kambe").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("Shane Kerr").copy())); 
-                rrset->addRdata(Rdata::RdataPtr(TXT("Zhang Likun").copy()));
-                rrset->addRdata(Rdata::RdataPtr(TXT("Jeremy C. Reed").copy())); 
+                RRsetPtr rrset = RRsetPtr(new RRset(authors_name, RRClass::CH(),
+                                                    RRType::TXT(),
+                                                    RRTTL(3600)));
+                rrset->addRdata(generic::TXT("JINMEI Tatuya"));
+                rrset->addRdata(generic::TXT("Han Feng"));
+                rrset->addRdata(generic::TXT("Kazunori Fujiwara"));
+                rrset->addRdata(generic::TXT("Michael Graff"));
+                rrset->addRdata(generic::TXT("Evan Hunt"));
+                rrset->addRdata(generic::TXT("Jelte Jansen"));
+                rrset->addRdata(generic::TXT("Jin Jian"));
+                rrset->addRdata(generic::TXT("JINMEI Tatuya"));
+                rrset->addRdata(generic::TXT("Naoki Kambe"));
+                rrset->addRdata(generic::TXT("Shane Kerr")); 
+                rrset->addRdata(generic::TXT("Zhang Likun"));
+                rrset->addRdata(generic::TXT("Jeremy C. Reed")); 
 
                 result.addRRset(rrset);
                 result.setStatus(SearchResult::success);
             } else if (name == version_name) {
-                RRsetPtr rrset = RRsetPtr(new RRset(version_name, RRClass::CH, RRType::TXT, TTL(3600)));
-                rrset->addRdata(Rdata::RdataPtr(TXT("BIND10 0.0.1").copy()));
+                RRsetPtr rrset = RRsetPtr(new RRset(version_name, RRClass::CH(),
+                                                    RRType::TXT(),
+                                                    RRTTL(3600)));
+                rrset->addRdata(generic::TXT("BIND10 0.0.1"));
                 result.addRRset(rrset);
                 result.setStatus(SearchResult::success);
             } else {
@@ -102,23 +108,23 @@
         } else {
             result.setStatus(SearchResult::name_not_found);
         }
-    } else if (clas == RRClass::IN) {
+    } else if (clas == RRClass::IN()) {
         if (zones.contains(name)) {
-            RRsetPtr rrset = RRsetPtr(new RRset(name, clas, type, TTL(3600)));
+            RRsetPtr rrset = RRsetPtr(new RRset(name, clas, type, RRTTL(3600)));
             result.setStatus(SearchResult::success);
-            if (type == RRType::A) {
-                BOOST_FOREACH(isc::dns::Rdata::RdataPtr a, a_records) {
+            if (type == RRType::A()) {
+                BOOST_FOREACH(RdataPtr a, a_records) {
                     rrset->addRdata(a);
                 }
-            } else if (type == RRType::AAAA) {
-                BOOST_FOREACH(isc::dns::Rdata::RdataPtr aaaa, aaaa_records) {
+            } else if (type == RRType::AAAA()) {
+                BOOST_FOREACH(RdataPtr aaaa, aaaa_records) {
                     rrset->addRdata(aaaa);
                 }
-            } else if (type == RRType::NS) {
-                BOOST_FOREACH(isc::dns::Rdata::RdataPtr ns, ns_records) {
+            } else if (type == RRType::NS()) {
+                BOOST_FOREACH(RdataPtr ns, ns_records) {
                     rrset->addRdata(ns);
                 }
-            } else if (type == RRType::SOA) {
+            } else if (type == RRType::SOA()) {
                 rrset->addRdata(soa);
             }
             result.addRRset(rrset);
@@ -144,11 +150,11 @@
 /// we should probably make this private
 SearchResult::status_type
 DataSourceParkingLot::addToMessage(Message& msg,
-             section_t section,
+             const Section& section,
              const Name& zone_name,
              const Name& name,
-             const isc::dns::RRClass& clas,
-             const isc::dns::RRType& type)
+             const RRClass& clas,
+             const RRType& type)
 {
     SearchResult result = findRRsets(zone_name, name, clas, type);
     BOOST_FOREACH(RRsetPtr rrset, result) {

Modified: branches/parkinglot/src/bin/parkinglot/data_source_plot.h
==============================================================================
--- branches/parkinglot/src/bin/parkinglot/data_source_plot.h (original)
+++ branches/parkinglot/src/bin/parkinglot/data_source_plot.h Tue Jan 26 23:10:10 2010
@@ -18,17 +18,19 @@
 #ifndef __DATA_SOURCE_SIMPLE_H
 #define __DATA_SOURCE_SIMPLE_H
 
-#include <dns/buffer.h>
-#include <dns/name.h>
-#include <dns/rrset.h>
-#include <dns/message.h>
+#include <dns/cpp/buffer.h>
+#include <dns/cpp/name.h>
+#include <dns/cpp/rdata.h>
+#include <dns/cpp/rrclass.h>
+#include <dns/cpp/rrtype.h>
+#include <dns/cpp/rrset.h>
+#include <dns/cpp/message.h>
 
 #include <cc/cpp/data.h>
 
 #include "common.h"
 
-#include "dns/data_source.h"
-#include "dns/rrset.h"
+#include "data_source.h"
 
 #include "zoneset.h"
 
@@ -60,7 +62,7 @@
     void addAAAARecord(std::string data);
     void addNSRecord(std::string data);
 
-    void setSOARecord(isc::dns::Rdata::RdataPtr soa_record);
+    void setSOARecord(isc::dns::rdata::RdataPtr soa_record);
 
     /// Do direct 'search' in database, no extra processing,
     /// and add the resulting rrsets to the specified section
@@ -68,18 +70,18 @@
     /// Once the dns logic is moved from parkinglot to this class,
     /// we should probably make this private
     SearchResult::status_type addToMessage(Message& msg,
-                 section_t section,
-                 const Name& zone_name,
-                 const Name& name,
-                 const isc::dns::RRClass& clas,
-                 const isc::dns::RRType& type);
+                                           const isc::dns::Section& section,
+                                           const isc::dns::Name& zone_name,
+                                           const isc::dns::Name& name,
+                                           const isc::dns::RRClass& clas,
+                                           const isc::dns::RRType& type);
 
 private:
     //
     void setDefaultZoneData();
 
-    std::vector<isc::dns::Rdata::RdataPtr> a_records, aaaa_records, ns_records;
-    isc::dns::Rdata::RdataPtr soa;
+    std::vector<isc::dns::rdata::RdataPtr> a_records, aaaa_records, ns_records;
+    isc::dns::rdata::RdataPtr soa;
     ZoneSet zones;
 
 };
@@ -88,3 +90,7 @@
 }
 
 #endif
+
+// Local Variables: 
+// mode: c++
+// End: 

Modified: branches/parkinglot/src/bin/parkinglot/main.cc
==============================================================================
--- branches/parkinglot/src/bin/parkinglot/main.cc (original)
+++ branches/parkinglot/src/bin/parkinglot/main.cc Tue Jan 26 23:10:10 2010
@@ -25,10 +25,10 @@
 
 #include <boost/foreach.hpp>
 
-#include <dns/buffer.h>
-#include <dns/name.h>
-#include <dns/rrset.h>
-#include <dns/message.h>
+#include <dns/cpp/buffer.h>
+#include <dns/cpp/name.h>
+#include <dns/cpp/rrset.h>
+#include <dns/cpp/message.h>
 
 #include <cc/cpp/session.h>
 #include <cc/cpp/data.h>

Modified: branches/parkinglot/src/bin/parkinglot/parkinglot.cc
==============================================================================
--- branches/parkinglot/src/bin/parkinglot/parkinglot.cc (original)
+++ branches/parkinglot/src/bin/parkinglot/parkinglot.cc Tue Jan 26 23:10:10 2010
@@ -23,23 +23,27 @@
 #include <set>
 #include <iostream>
 
-#include <dns/buffer.h>
-#include <dns/name.h>
-#include <dns/rrset.h>
-#include <dns/message.h>
+#include <dns/cpp/buffer.h>
+#include <dns/cpp/messagerenderer.h>
+#include <dns/cpp/name.h>
+#include <dns/cpp/question.h>
+#include <dns/cpp/rrset.h>
+#include <dns/cpp/rrttl.h>
+#include <dns/cpp/message.h>
 
 #include <cc/cpp/data.h>
 
 #include "common.h"
 #include "parkinglot.h"
 
+#include <boost/lexical_cast.hpp>
 #include <boost/foreach.hpp>
 
 using namespace std;
 
 using namespace isc::dns;
-using namespace isc::dns::Rdata::IN;
-using namespace isc::dns::Rdata::Generic;
+using namespace isc::dns::rdata::in;
+using namespace isc::dns::rdata::generic;
 using namespace isc::data;
 
 ParkingLot::ParkingLot(int port) {
@@ -77,10 +81,13 @@
     struct sockaddr* sa = static_cast<struct sockaddr*>((void*)&ss);
     int s = sock;
     Message msg;
-
-    if (msg.getBuffer().recvFrom(s, sa, &sa_len) > 0) {
+    char recvbuf[4096];
+    int cc;
+
+    if ((cc = recvfrom(s, recvbuf, sizeof(recvbuf), 0, sa, &sa_len)) > 0) {
+        InputBuffer buffer(recvbuf, cc);
         try {
-            msg.fromWire();
+            msg.fromWire(buffer);
         } catch (...) {
             cerr << "parse failed" << endl;
             return;
@@ -88,69 +95,99 @@
 
         cout << "received a message:\n" << msg.toText() << endl;
 
-        if (msg.getSection(SECTION_QUESTION).size() != 1)
+        QuestionIterator qid = msg.beginQuestion();
+        qid++;                  // XXX: should revise this code
+        if (qid != msg.endQuestion()) {
             return;
+        }
+
+        QuestionPtr query = *msg.beginQuestion();
 
         msg.makeResponse();
-        msg.setAA(true);
-
-        RRsetPtr query = msg.getSection(SECTION_QUESTION)[0];
-
-        msg.makeResponse();
-        msg.setAA(true);
-        TTL default_ttl = TTL(3600);
-
-        Name zname;
+        msg.setHeaderFlag(MessageFlag::AA());
+        RRTTL default_ttl = RRTTL(3600);
+
+        Name zname(".");        // ugly, but should work for now
         Name name = query->getName();
         RRClass qclass = query->getClass();
         RRType qtype = query->getType();
         SearchResult::status_type status;
         bool included_ns = false;
         if (data_source.hasZoneFor(query->getName(), zname)) {
-            status = data_source.addToMessage(msg, SECTION_ANSWER, zname, name, qclass, qtype);
+            status = data_source.addToMessage(msg, Section::ANSWER(), zname,
+                                              name, qclass, qtype);
             // rcode is based on this result?
             if (status == SearchResult::name_not_found) {
-                msg.setRcode(Message::RCODE_NXDOMAIN);
-                if (qtype != RRType::NS) {
-                    status = data_source.addToMessage(msg, SECTION_AUTHORITY, zname, zname, qclass, RRType::SOA);
+                msg.setRcode(Rcode::NXDOMAIN());
+                if (qtype != RRType::NS()) {
+                    status = data_source.addToMessage(msg, Section::AUTHORITY(),
+                                                      zname, zname, qclass,
+                                                      RRType::SOA());
                 }
             } else {
-                if (qtype != RRType::NS) {
-                    status = data_source.addToMessage(msg, SECTION_AUTHORITY, zname, zname, qclass, RRType::NS);
+                if (qtype != RRType::NS()) {
+                    status = data_source.addToMessage(msg, Section::AUTHORITY(),
+                                                      zname, zname, qclass,
+                                                      RRType::NS());
                 }
                 included_ns = true;
             }
             // If we included NS records, and their target falls below the zone, add glue
             if (included_ns) {
-                BOOST_FOREACH(RRsetPtr rrset, msg.getSection(SECTION_ANSWER)) {
-                    if (rrset->getType() == RRType::NS) {
-                        BOOST_FOREACH(Rdata::RdataPtr rdata, rrset->getRdatalist()) {
+                for (RRsetIterator it = msg.beginSection(Section::ANSWER());
+                     it != msg.endSection(Section::ANSWER());
+                     ++it) {
+                    RRsetPtr rrset = (*it);
+                    if (rrset->getType() == RRType::NS()) {
+                        RdataIteratorPtr rrsetit = rrset->getRdataIterator();
+                        for (rrsetit->first();
+                             !rrsetit->isLast();
+                             rrsetit->next()) {
+                            const rdata::Rdata& rdata = rrsetit->getCurrent();
                             /* no direct way to get the Name from the rdata fields? */
-                            Name ns_name = Name(rdata->toText());
-                            data_source.addToMessage(msg, SECTION_ADDITIONAL, zname, ns_name, qclass, RRType::A);
-                            data_source.addToMessage(msg, SECTION_ADDITIONAL, zname, ns_name, qclass, RRType::AAAA);
+                            Name ns_name = Name(rdata.toText());
+                            data_source.addToMessage(msg, Section::ADDITIONAL(),
+                                                     zname, ns_name, qclass,
+                                                     RRType::A());
+                            data_source.addToMessage(msg, Section::ADDITIONAL(),
+                                                     zname, ns_name, qclass,
+                                                     RRType::AAAA());
                         }
                     }
                 }
-                BOOST_FOREACH(RRsetPtr rrset, msg.getSection(SECTION_AUTHORITY)) {
-                    if (rrset->getType() == RRType::NS) {
-                        BOOST_FOREACH(Rdata::RdataPtr rdata, rrset->getRdatalist()) {
+                for (RRsetIterator it = msg.beginSection(Section::ANSWER());
+                     it != msg.endSection(Section::ANSWER());
+                     ++it) {
+                    RRsetPtr rrset = (*it);
+                    if (rrset->getType() == RRType::NS()) {
+                        RdataIteratorPtr rrsetit = rrset->getRdataIterator();
+                        for (rrsetit->first();
+                             !rrsetit->isLast();
+                             rrsetit->next()) {
+                            const rdata::Rdata& rdata = rrsetit->getCurrent();
                             /* no direct way to get the Name from the rdata fields? */
-                            Name ns_name = Name(rdata->toText());
-                            data_source.addToMessage(msg, SECTION_ADDITIONAL, zname, ns_name, qclass, RRType::A);
-                            data_source.addToMessage(msg, SECTION_ADDITIONAL, zname, ns_name, qclass, RRType::AAAA);
+                            Name ns_name = Name(rdata.toText());
+                            data_source.addToMessage(msg, Section::ADDITIONAL(),
+                                                     zname, ns_name, qclass,
+                                                     RRType::A());
+                            data_source.addToMessage(msg, Section::ADDITIONAL(),
+                                                     zname, ns_name, qclass,
+                                                     RRType::AAAA());
                         }
                     }
                 }
             }
         } else {
-            msg.setRcode(Message::RCODE_SERVFAIL);
-        }
-        msg.toWire();
+            msg.setRcode(Rcode::SERVFAIL());
+        }
+
+        OutputBuffer obuffer(4096);
+        MessageRenderer renderer(obuffer);
+        msg.toWire(renderer);
         cout << "sending a response (" <<
-            boost::lexical_cast<string>(msg.getBuffer().getSize())
+            boost::lexical_cast<string>(obuffer.getLength())
                   << " bytes):\n" << msg.toText() << endl;
-        msg.getBuffer().sendTo(s, *sa, sa_len);
+        sendto(s, obuffer.getData(), obuffer.getLength(), 0, sa, sa_len);
     }
 }
 

Modified: branches/parkinglot/src/bin/parkinglot/zoneset.h
==============================================================================
--- branches/parkinglot/src/bin/parkinglot/zoneset.h (original)
+++ branches/parkinglot/src/bin/parkinglot/zoneset.h Tue Jan 26 23:10:10 2010
@@ -18,8 +18,8 @@
 #define __ZONESET_H 1
 
 #include <set>
-#include <dns/buffer.h>
-#include <dns/name.h>
+#include <dns/cpp/buffer.h>
+#include <dns/cpp/name.h>
 
 class ZoneSet {
 public:




More information about the bind10-changes mailing list