[svn] commit: r618 - in /branches/parkinglot/src/lib/dns/cpp: rdata_unittest.cc rrparamregistry.cc rrparamregistry.h
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Jan 29 01:15:13 UTC 2010
Author: jinmei
Date: Fri Jan 29 01:15:13 2010
New Revision: 618
Log:
supported class-indepent RRtypes explicitly
Modified:
branches/parkinglot/src/lib/dns/cpp/rdata_unittest.cc
branches/parkinglot/src/lib/dns/cpp/rrparamregistry.cc
branches/parkinglot/src/lib/dns/cpp/rrparamregistry.h
Modified: branches/parkinglot/src/lib/dns/cpp/rdata_unittest.cc
==============================================================================
--- branches/parkinglot/src/lib/dns/cpp/rdata_unittest.cc (original)
+++ branches/parkinglot/src/lib/dns/cpp/rdata_unittest.cc Fri Jan 29 01:15:13 2010
@@ -243,6 +243,8 @@
EXPECT_EQ(0, rdata_ns.compare(generic::NS("ns.example.com.")));
// should be case sensitive.
EXPECT_EQ(0, rdata_ns.compare(generic::NS("NS.EXAMPLE.COM")));
+ EXPECT_EQ(0, rdata_ns.compare(*createRdata(RRType("NS"), RRClass(65000),
+ "ns.example.com")));
}
TEST_F(RdataTest, createFromWire_NS)
Modified: branches/parkinglot/src/lib/dns/cpp/rrparamregistry.cc
==============================================================================
--- branches/parkinglot/src/lib/dns/cpp/rrparamregistry.cc (original)
+++ branches/parkinglot/src/lib/dns/cpp/rrparamregistry.cc Fri Jan 29 01:15:13 2010
@@ -124,6 +124,7 @@
/// cases.
typedef pair<RRType, RRClass> RRTypeClass;
typedef map<RRTypeClass, RdataFactoryPtr> RdataFactoryMap;
+typedef map<RRType, RdataFactoryPtr> GenericRdataFactoryMap;
template <typename T>
class RdataFactory : public AbstractRdataFactory {
@@ -161,6 +162,7 @@
/// Mappings from textual representations of RR classes to integer codes.
CodeRRClassMap code2classmap;
RdataFactoryMap rdata_factories;
+ GenericRdataFactoryMap genericrdata_factories;
};
RRParamRegistry::RRParamRegistry()
@@ -181,19 +183,16 @@
// each class repeatedly? Or should we have a special mapping category
// of "generic" as a last resort?
add("NS", 2, "IN", 1, RdataFactoryPtr(new RdataFactory<generic::NS>()));
- add("NS", 2, "CH", 3, RdataFactoryPtr(new RdataFactory<generic::NS>()));
+ add("NS", 2, RdataFactoryPtr(new RdataFactory<generic::NS>()));
add("SOA", 6, "IN", 1,
RdataFactoryPtr(new RdataFactory<generic::SOA>()));
- add("SOA", 6, "CH", 3,
- RdataFactoryPtr(new RdataFactory<generic::SOA>()));
+ add("SOA", 6, RdataFactoryPtr(new RdataFactory<generic::SOA>()));
add("MX", 15, "IN", 1,
RdataFactoryPtr(new RdataFactory<generic::MX>()));
- add("MX", 15, "CH", 3,
- RdataFactoryPtr(new RdataFactory<generic::MX>()));
+ add("MX", 15, RdataFactoryPtr(new RdataFactory<generic::MX>()));
add("TXT", 16, "IN", 1,
RdataFactoryPtr(new RdataFactory<generic::TXT>()));
- add("TXT", 16, "CH", 3,
- RdataFactoryPtr(new RdataFactory<generic::TXT>()));
+ add("TXT", 16, RdataFactoryPtr(new RdataFactory<generic::TXT>()));
} catch (...) {
delete impl_;
throw;
@@ -211,6 +210,24 @@
static RRParamRegistry registry;
return (registry);
+}
+
+void
+RRParamRegistry::add(const string& typecode_string, uint16_t typecode,
+ RdataFactoryPtr rdata_factory)
+{
+ bool type_added = false;
+ try {
+ type_added = addType(typecode_string, typecode);
+ impl_->genericrdata_factories.insert(pair<RRType, RdataFactoryPtr>(
+ RRType(typecode),
+ rdata_factory));
+ } catch (...) {
+ if (type_added) {
+ removeType(typecode);
+ }
+ throw;
+ }
}
void
@@ -439,6 +456,12 @@
return (found->second->create(rdata_string));
}
+ GenericRdataFactoryMap::const_iterator genfound =
+ impl_->genericrdata_factories.find(rrtype);
+ if (genfound != impl_->genericrdata_factories.end()) {
+ return (genfound->second->create(rdata_string));
+ }
+
dns_throw(InvalidRdataText, "Unrecognized Rdata type to create from text");
}
@@ -452,6 +475,12 @@
return (found->second->create(buffer, rdata_len));
}
+ GenericRdataFactoryMap::const_iterator genfound =
+ impl_->genericrdata_factories.find(rrtype);
+ if (genfound != impl_->genericrdata_factories.end()) {
+ return (genfound->second->create(buffer, rdata_len));
+ }
+
// construct an "unknown" type of RDATA
return (RdataPtr(new generic::Generic(buffer, rdata_len)));
}
@@ -466,6 +495,12 @@
return (found->second->create(source));
}
+ GenericRdataFactoryMap::const_iterator genfound =
+ impl_->genericrdata_factories.find(rrtype);
+ if (genfound != impl_->genericrdata_factories.end()) {
+ return (genfound->second->create(source));
+ }
+
dns_throw(InvalidRdataText, "TBD");
}
}
Modified: branches/parkinglot/src/lib/dns/cpp/rrparamregistry.h
==============================================================================
--- branches/parkinglot/src/lib/dns/cpp/rrparamregistry.h (original)
+++ branches/parkinglot/src/lib/dns/cpp/rrparamregistry.h Fri Jan 29 01:15:13 2010
@@ -179,6 +179,10 @@
const std::string& class_string, uint16_t class_code,
rdata::RdataFactoryPtr rdata_factory);
+ /// TBD
+ void add(const std::string& type_string, uint16_t type_code,
+ rdata::RdataFactoryPtr rdata_factory);
+
/// \brief Add mappings between RR type code and textual representation.
///
/// This method adds a mapping from the type code of an RR to its textual
More information about the bind10-changes
mailing list