[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