[svn] commit: r579 - in /experiments/each-query/src/lib/auth/cpp: query.cc query.h

BIND 10 source code commits bind10-changes at lists.isc.org
Thu Jan 28 01:29:21 UTC 2010


Author: each
Date: Thu Jan 28 01:29:21 2010
New Revision: 579

Log:
checkpoint

Modified:
    experiments/each-query/src/lib/auth/cpp/query.cc
    experiments/each-query/src/lib/auth/cpp/query.h

Modified: experiments/each-query/src/lib/auth/cpp/query.cc
==============================================================================
--- experiments/each-query/src/lib/auth/cpp/query.cc (original)
+++ experiments/each-query/src/lib/auth/cpp/query.cc Thu Jan 28 01:29:21 2010
@@ -21,7 +21,7 @@
 
 #include <cc/cpp/data.h>
 
-#include "data_source.h"
+#include "query.h"
 
 namespace isc {
 namespace dns {

Modified: experiments/each-query/src/lib/auth/cpp/query.h
==============================================================================
--- experiments/each-query/src/lib/auth/cpp/query.h (original)
+++ experiments/each-query/src/lib/auth/cpp/query.h Thu Jan 28 01:29:21 2010
@@ -19,50 +19,65 @@
 
 #include <queue>
 
-#include "name.h"
-#include "rrset.h"
-#include "data_source.h"
+#include <dns/cpp/exceptions.h>
+#include <dns/cpp/name.h>
+#include <dns/cpp/rrset.h>
+#include <dns/cpp/rrclass.h>
+#include <dns/cpp/rrtype.h>
 
 namespace isc {
 namespace dns {
 
 enum QueryResult { success, incomplete, not_found };
 
+///
+/// \brief exception to throw if a DNS Message is malformed
+/// 
+class MalformedMessage : public Exception {
+public:
+    MalformedMessage(const char* file, size_t line, const char* what) :
+        isc::dns::Exception(file, line, what) {}
+};
+
 // An individual task to be carried out by the query logic
 class QueryTask {
 public:
-    QueryTask(const Name& n, const RRClass& c, const RRType& t,
-              const SectionCode s) {
-        qname = n;
-        qclass = c;
-        qtype = t;
+    QueryTask(Name& n, RRClass& c, RRType& t, SectionCode s) :
+              qname(n), qclass(c), qtype(t)
+    {
         section = s;
     }
 
     virtual ~QueryTask();
 
-    const Name& qname;
-    const RRlass& qclass;
-    const RRType& qtype;
-    const SectionCode section;
+    Name& qname;
+    RRClass& qclass;
+    RRType& qtype;
+    SectionCode section;
 };
 
 // Data Source query
 class Query {
 public:
     Query(Message& m, bool dnssec) {
-        _message = m;
-        _want_additional = true;
-        _want_dnssec = dnssec;
+        message_ = m;
+        want_additional = true;
+        want_dnssec = dnssec;
         _result = incomplete;
 
+        // Check message formatting
+        QuestionIterator qid = message_.beginQuestion();
+        qid++;
+        if (qid != message_.endQuestion())
+                dns_throw(MalformedMessage, "too many questions");
+
         // Populate the query tasks queue with the initial question
-        QuestionPtr query = *_message.beginQuestion();
-        _qname = query->getName();
-        _qclass = query->getClass();
-        _qtype = query->getType();
-        _qtasks = new std::queue<QueryTask>;
-        _qtasks.push(new QueryTask(_qname, _qclass, _qtype, answer));
+        QuestionPtr query = *message_.beginQuestion();
+     //   qname_ = query->getName();
+        qclass_ = query->getClass();
+     //   qtype_ = query->getType();
+     //   querytasks = new std::queue<QueryTask>;
+     //   querytasks.push(new QueryTask(qname_, qclass_, qtype_, answer));
     };
 
     virtual ~Query() {}
@@ -70,19 +85,20 @@
     // wantAdditional() == true indicates that additional-section data
     // should be looked up while processing this query.  false indicates
     // that we're only interested in answer-section data
-    bool wantAdditional() { return _want_additional; }
-    void setWantAdditional(bool d) { _want_additional = d; }
+    bool wantAdditional() { return want_additional; }
+    void setWantAdditional(bool d) { want_additional = d; }
 
     // wantDnssec() == true indicates that DNSSEC data should be retrieved
     // from the data source when this query is being processed
-    bool wantDnssec() { return _want_dnssec; }
-    void setWantDnssec(bool d) { _want_dnssec = d; }
+    bool wantDnssec() { return want_dnssec; }
+    void setWantDnssec(bool d) { want_dnssec = d; }
 
-    Name& qname() { return _qname; }
-    RRClass& qclass() { return _qclass; }
-    RRType& qtype() { return _qtype; }
-    Message& message() { return _message; }
-    std::queue<QueryTask>& tasks() { return _qtasks; }
+    const Name& qname() { return qname_; }
+    const RRClass& qclass() { return qclass_; }
+    const RRType& qtype() { return qtype_; }
+
+    Message& message() { return message_; }
+    std::queue<QueryTask>& tasks() { return querytasks; }
 
     QueryResult result() { return _result; }
 
@@ -90,15 +106,15 @@
     QueryResult _result;
 
 private:
-    const Name& _qname;
-    const RRClass& _qclass;
-    const RRType& _qtype;
+    Name qname_;
+    RRClass qclass_;
+    RRType qtype_;
 
-    Message _message;
-    std::queue<QueryTask>& _qtasks;
+    Message message_;
+    std::queue<QueryTask> querytasks;
 
-    bool _want_additional;
-    bool _want_dnssec;
+    bool want_additional;
+    bool want_dnssec;
 };
 
 }




More information about the bind10-changes mailing list