[svn] commit: r789 - in /trunk/src/lib/dns/cpp: rdata/generic/soa_6.cc rdata/generic/soa_6.h rdata_unittest.cc

BIND 10 source code commits bind10-changes at lists.isc.org
Wed Feb 10 23:00:58 UTC 2010


Author: jinmei
Date: Wed Feb 10 23:00:58 2010
New Revision: 789

Log:
added quick hack implementation of the SOA rdata class for datasource
development.
passed minimum level of unit test, will get it reviewed in the next review
cycle.

Modified:
    trunk/src/lib/dns/cpp/rdata/generic/soa_6.cc   (contents, props changed)
    trunk/src/lib/dns/cpp/rdata/generic/soa_6.h   (props changed)
    trunk/src/lib/dns/cpp/rdata_unittest.cc

Modified: trunk/src/lib/dns/cpp/rdata/generic/soa_6.cc
==============================================================================
--- trunk/src/lib/dns/cpp/rdata/generic/soa_6.cc (original)
+++ trunk/src/lib/dns/cpp/rdata/generic/soa_6.cc Wed Feb 10 23:00:58 2010
@@ -39,10 +39,35 @@
     buffer.readData(numdata_, sizeof(numdata_));
 }
 
-SOA::SOA(const std::string& soastr) :
-    mname_("."), rname_(".")
+SOA::SOA(const string& soastr) :
+    mname_("."), rname_(".")    // quick hack workaround
 {
-    dns_throw(InvalidRdataText, "Not implemented yet");
+    istringstream iss(soastr);
+    string token;
+
+    iss >> token;
+    if (iss.bad() || iss.fail()) {
+        dns_throw(InvalidRdataText, "Invalid SOA MNAME");
+    }
+    mname_ = Name(token);
+    iss >> token;
+    rname_ = Name(token);
+    if (iss.bad() || iss.fail()) {
+        dns_throw(InvalidRdataText, "Invalid SOA RNAME");
+    }
+
+    uint32_t serial, refresh, retry, expire, minimum;
+    iss >> serial >> refresh >> retry >> expire >> minimum;
+    if (iss.rdstate() != ios::eofbit) {
+        dns_throw(InvalidRdataText, "Invalid SOA format");
+    }
+    OutputBuffer buffer(20);
+    buffer.writeUint32(serial);
+    buffer.writeUint32(refresh);
+    buffer.writeUint32(retry);
+    buffer.writeUint32(expire);
+    buffer.writeUint32(minimum);
+    memcpy(numdata_,  buffer.getData(), buffer.getLength());
 }
 
 SOA::SOA(const Name& mname, const Name& rname, uint32_t serial,

Modified: trunk/src/lib/dns/cpp/rdata_unittest.cc
==============================================================================
--- trunk/src/lib/dns/cpp/rdata_unittest.cc (original)
+++ trunk/src/lib/dns/cpp/rdata_unittest.cc Wed Feb 10 23:00:58 2010
@@ -330,7 +330,11 @@
 
 TEST_F(RdataTest, createFromText_SOA)
 {
-    //TBD
+    EXPECT_EQ(0, rdata_soa.compare(generic::SOA("ns.example.com. "
+                                                "root.example.com. "
+                                                "2010012601 3600 300 3600000 "
+                                                "1200")));
+    // TBD: more tests
 }
 
 TEST_F(RdataTest, createFromWire_SOA)




More information about the bind10-changes mailing list