BIND 10 trac1130, updated. f17363ea38564867df555b6be9138d2eff28daa0 [trac1130] Add basic <character-string> extraction function
BIND 10 source code commits
bind10-changes at lists.isc.org
Tue Aug 2 11:08:19 UTC 2011
The branch, trac1130 has been updated
via f17363ea38564867df555b6be9138d2eff28daa0 (commit)
from e89a3a1302cd3e95403c5c64edb126153852ff35 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit f17363ea38564867df555b6be9138d2eff28daa0
Author: Ocean Wang <wanghaidong at cnnic.cn>
Date: Tue Aug 2 19:07:02 2011 +0800
[trac1130] Add basic <character-string> extraction function
-----------------------------------------------------------------------
Summary of changes:
src/lib/dns/rdata/in_1/naptr_35.cc | 100 +++++++++++++++++++++++++-
src/lib/dns/rdata/in_1/naptr_35.h | 20 +++++
src/lib/dns/tests/rdata_in_naptr_unittest.cc | 10 +++-
3 files changed, 126 insertions(+), 4 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/lib/dns/rdata/in_1/naptr_35.cc b/src/lib/dns/rdata/in_1/naptr_35.cc
index cd58e8d..5fd5ae8 100644
--- a/src/lib/dns/rdata/in_1/naptr_35.cc
+++ b/src/lib/dns/rdata/in_1/naptr_35.cc
@@ -33,13 +33,34 @@ using namespace isc::util;
// BEGIN_ISC_NAMESPACE
// BEGIN_RDATA_NAMESPACE
-NAPTR::NAPTR(InputBuffer& buffer, size_t len) {
+NAPTR::NAPTR(InputBuffer& buffer, size_t len):
+ replacement_(".")
+{
}
-NAPTR::NAPTR(const std::string& naptr_str) {
+NAPTR::NAPTR(const std::string& naptr_str):
+ replacement_(".")
+{
+ istringstream iss(naptr_str);
+ uint16_t order;
+ uint16_t preference;
+
+ iss >> order >> preference;
+
+ if (iss.bad() || iss.fail()) {
+ isc_throw(InvalidRdataText, "Invalid NAPTR text format");
+ }
+
+ order_ = order;
+ preference_ = preference;
+
+ string::const_iterator input_iterator = naptr_str.begin() + iss.tellg();
+ flags_ = getNextCharacterString(naptr_str, input_iterator);
}
-NAPTR::NAPTR(const NAPTR& naptr) {
+NAPTR::NAPTR(const NAPTR& naptr):
+ replacement_(".")
+{
}
void
@@ -52,6 +73,7 @@ NAPTR::toWire(AbstractMessageRenderer& renderer) const {
string
NAPTR::toText() const {
+ return "";
}
int
@@ -59,5 +81,77 @@ NAPTR::compare(const Rdata& other) const {
return 0;
}
+uint16_t
+NAPTR::getOrder() const {
+ return order_;
+}
+
+uint16_t
+NAPTR::getPreference() const {
+ return preference_;
+}
+
+const std::string&
+NAPTR::getFlags() const {
+ return flags_;
+}
+
+const std::string&
+NAPTR::getServices() const {
+ return services_;
+}
+
+const std::string&
+NAPTR::getRegexp() const {
+ return regexp_;
+}
+
+const Name&
+NAPTR::getReplacement() const {
+ return replacement_;
+}
+
+std::string
+NAPTR::getNextCharacterString(const std::string& input_str, std::string::const_iterator& input_iterator){
+ string result;
+
+ // Skip white spaces
+ while (input_iterator < input_str.end() && isspace(*input_iterator)) {
+ ++input_iterator;
+ }
+
+ // If the input string only contains white-spaces, it is an invalid <character-string>
+ if (input_iterator >= input_str.end()) {
+ isc_throw(InvalidRdataText, "Invalid NAPTR text format");
+ }
+
+ // Whether the <character-string> is seperated with doulble quotes symbol (")
+ bool quotes_seperated = (*input_iterator == '"');
+
+ if (quotes_seperated) {
+ ++input_iterator;
+ }
+
+ while(input_iterator < input_str.end()){
+ if (quotes_seperated) {
+ // If the <character-string> is seperated with quotes symbol and another
+ // quotes symbol is encountered, it is the end of the <character-string>
+ if (*input_iterator == '"') {
+ break;
+ }
+ } else if (*input_iterator == ' ') {
+ // If the <character-string> is not seperated with quotes symbol, it is
+ // seperated with <space> char
+ break;
+ }
+
+ result.push_back(*input_iterator);
+
+ ++input_iterator;
+ }
+
+ return result;
+}
+
// END_RDATA_NAMESPACE
// END_ISC_NAMESPACE
diff --git a/src/lib/dns/rdata/in_1/naptr_35.h b/src/lib/dns/rdata/in_1/naptr_35.h
index be5e22d..2921771 100644
--- a/src/lib/dns/rdata/in_1/naptr_35.h
+++ b/src/lib/dns/rdata/in_1/naptr_35.h
@@ -16,6 +16,7 @@
#include <string>
+#include <dns/name.h>
#include <dns/rdata.h>
// BEGIN_ISC_NAMESPACE
@@ -31,7 +32,26 @@ public:
// END_COMMON_MEMBERS
// NAPTR specific methods
+ uint16_t getOrder() const;
+ uint16_t getPreference() const;
+ const std::string& getFlags() const;
+ const std::string& getServices() const;
+ const std::string& getRegexp() const;
+ const Name& getReplacement() const;
private:
+ /// Extract a <character-string> from a string
+ ///
+ /// \param input_str The input string
+ /// \param input_iterator The iterator from which to start extracting
+ /// \return a std::string that contains the extracted <character-string>
+ std::string getNextCharacterString(const std::string& input_str, std::string::const_iterator& input_iterator);
+
+ uint16_t order_;
+ uint16_t preference_;
+ std::string flags_;
+ std::string services_;
+ std::string regexp_;
+ Name replacement_;
};
// END_RDATA_NAMESPACE
diff --git a/src/lib/dns/tests/rdata_in_naptr_unittest.cc b/src/lib/dns/tests/rdata_in_naptr_unittest.cc
index 0f5577b..f687182 100644
--- a/src/lib/dns/tests/rdata_in_naptr_unittest.cc
+++ b/src/lib/dns/tests/rdata_in_naptr_unittest.cc
@@ -30,6 +30,7 @@ using namespace std;
using namespace isc::dns;
using namespace isc::util;
using namespace isc::dns::rdata;
+using namespace isc::dns::rdata::in;
namespace {
class Rdata_IN_NAPTR_Test : public RdataTest {
@@ -39,9 +40,16 @@ class Rdata_IN_NAPTR_Test : public RdataTest {
static uint8_t naptr_rdata[] = {0x00,0x0a,0x00,0x64,0x01,0x53,0x07,0x53,0x49,0x50,0x2b,0x44,0x32,0x55,0x00,0x04,0x5f,0x73,0x69,0x70,
0x04,0x5f,0x75,0x64,0x70,0x07,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x03,0x63,0x6f,0x6d,0x00};
-static char *naptr_str = "10 100 \"S\" \"SIP+D2U\" \"\" _sip._udp.example.com.";
+static const char *naptr_str = "10 100 \"S\" \"SIP+D2U\" \"\" _sip._udp.example.com.";
TEST_F(Rdata_IN_NAPTR_Test, createFromText) {
+ NAPTR naptr(naptr_str);
+ EXPECT_EQ(10, naptr.getOrder());
+ EXPECT_EQ(100, naptr.getPreference());
+ EXPECT_EQ(string("S"), naptr.getFlags());
+}
+
+TEST_F(Rdata_IN_NAPTR_Test, createFromWire) {
}
}
More information about the bind10-changes
mailing list