BIND 10 trac494, updated. 9f172776a92413f7ba09fae87c98522c3d55fe63 [trac494] initial addition of lib/resolve
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Jan 27 12:19:24 UTC 2011
The branch, trac494 has been updated
via 9f172776a92413f7ba09fae87c98522c3d55fe63 (commit)
from 8a175757cd9b46205b7118c3e7fad72883f130e5 (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 9f172776a92413f7ba09fae87c98522c3d55fe63
Author: Jelte Jansen <jelte at isc.org>
Date: Thu Jan 27 13:17:31 2011 +0100
[trac494] initial addition of lib/resolve
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 2 +
src/lib/Makefile.am | 2 +-
src/lib/asiolink/Makefile.am | 1 +
src/lib/asiolink/asiolink.cc | 40 +++-----------
src/lib/asiolink/asiolink.h | 37 -------------
src/lib/resolve/Makefile.am | 15 +++++
src/lib/resolve/resolve.cc | 46 ++++++++++++++++
src/lib/resolve/resolve.h | 62 ++++++++++++++++++++++
src/lib/{nsas => resolve}/tests/run_unittests.cc | 2 -
9 files changed, 136 insertions(+), 71 deletions(-)
create mode 100644 src/lib/resolve/Makefile.am
create mode 100644 src/lib/resolve/resolve.cc
create mode 100644 src/lib/resolve/resolve.h
copy src/lib/{nsas => resolve}/tests/run_unittests.cc (97%)
-----------------------------------------------------------------------
diff --git a/configure.ac b/configure.ac
index f08f044..7de33f0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -652,6 +652,8 @@ AC_CONFIG_FILES([Makefile
src/lib/datasrc/tests/Makefile
src/lib/xfr/Makefile
src/lib/log/Makefile
+ src/lib/resolve/Makefile
+ src/lib/resolve/tests/Makefile
src/lib/testutils/Makefile
src/lib/testutils/testdata/Makefile
src/lib/nsas/Makefile
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 866ca65..29433cb 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -1,2 +1,2 @@
SUBDIRS = exceptions dns cc config datasrc python xfr bench log asiolink \
- testutils nsas
+ testutils nsas resolve
diff --git a/src/lib/asiolink/Makefile.am b/src/lib/asiolink/Makefile.am
index 26d9a68..99b3c66 100644
--- a/src/lib/asiolink/Makefile.am
+++ b/src/lib/asiolink/Makefile.am
@@ -32,3 +32,4 @@ libasiolink_la_CXXFLAGS += -Wno-error
endif
libasiolink_la_CPPFLAGS = $(AM_CPPFLAGS)
libasiolink_la_LIBADD = $(top_builddir)/src/lib/log/liblog.la
+libasiolink_la_LIBADD += $(top_builddir)/src/lib/resolve/libresolve.la
diff --git a/src/lib/asiolink/asiolink.cc b/src/lib/asiolink/asiolink.cc
index db60ddc..7db8ba2 100644
--- a/src/lib/asiolink/asiolink.cc
+++ b/src/lib/asiolink/asiolink.cc
@@ -37,6 +37,8 @@
#include <asiolink/internal/tcpdns.h>
#include <asiolink/internal/udpdns.h>
+#include <resolve/resolve.h>
+
#include <log/dummylog.h>
using namespace asio;
@@ -355,7 +357,7 @@ private:
// Server to notify when we succeed or fail
//shared_ptr<DNSServer> server_;
- AbstractResolverCallback* resolvercallback_;
+ isc::resolve::AbstractResolverCallback* resolvercallback_;
/*
* TODO Do something more clever with timeouts. In the long term, some
@@ -478,7 +480,7 @@ public:
shared_ptr<AddressVector> upstream_root,
OutputBufferPtr buffer,
//DNSServer* server,
- AbstractResolverCallback* cb,
+ isc::resolve::AbstractResolverCallback* cb,
int timeout,
unsigned retries) :
io_(io),
@@ -566,8 +568,9 @@ RecursiveQuery::sendQuery(const isc::dns::QuestionPtr& question,
MessagePtr answer_message(new Message(Message::RENDER));
answer_message->setOpcode(isc::dns::Opcode::QUERY());
OutputBufferPtr buffer(new OutputBuffer(0));
- ResolverCallbackDirect* rcd = new ResolverCallbackDirect(callback,
- answer_message);
+ isc::resolve::ResolverCallbackDirect* rcd =
+ new isc::resolve::ResolverCallbackDirect(callback,
+ answer_message);
// It will delete itself when it is done
new RunningQuery(io, *question, answer_message, upstream_,
@@ -586,39 +589,14 @@ RecursiveQuery::sendQuery(const Question& question,
// we're only going to handle UDP.
asio::io_service& io = dns_service_.get_io_service();
- ResolverCallbackServer* crs = new ResolverCallbackServer(server);
+ isc::resolve::ResolverCallbackServer* crs =
+ new isc::resolve::ResolverCallbackServer(server);
// It will delete itself when it is done
new RunningQuery(io, question, answer_message, upstream_,
upstream_root_, buffer, crs, timeout_, retries_);
}
-void
-ResolverCallbackServer::callback(bool result) {
- server_->resume(result);
- delete server_;
- delete this;
-}
-
-void
-ResolverCallbackDirect::callback(bool result)
-{
- // simply return with the first rrset from answer right now
- if (result &&
- answer_message_->getRcode() == isc::dns::Rcode::NOERROR() &&
- answer_message_->getRRCount(isc::dns::Message::SECTION_ANSWER) > 0) {
- std::cout << *answer_message_ << std::endl;
- isc::dns::RRsetIterator rrsi = answer_message_->beginSection(isc::dns::Message::SECTION_ANSWER);
- const isc::dns::RRsetPtr result = *rrsi;
- callback_->success(result);
- } else {
- callback_->failure();
- }
- // once called back we don't need ourselves anymore
- delete this;
-}
-
-
class IntervalTimerImpl {
private:
// prohibit copy
diff --git a/src/lib/asiolink/asiolink.h b/src/lib/asiolink/asiolink.h
index e4c040e..234f3db 100644
--- a/src/lib/asiolink/asiolink.h
+++ b/src/lib/asiolink/asiolink.h
@@ -371,43 +371,6 @@ private:
DNSServer* self_;
};
-// We define two types of callbackholders for processing recursive
-// queries; one calls back the original DNSServer to resume()
-// the other uses direct callbacks (for instance when we need to
-// resolve something ourselves)
-// Caller warning: only callback once! The objects will delete
-// themselves on callback (after they have done they callback)
-class AbstractResolverCallback {
-public:
- ~AbstractResolverCallback() {};
- virtual void callback(bool result) = 0;
-};
-
-class ResolverCallbackServer : public AbstractResolverCallback {
-public:
- ResolverCallbackServer(DNSServer* server) :
- server_(server->clone()) {}
- void callback(bool result);
-
-private:
- DNSServer* server_;
-};
-
-class ResolverCallbackDirect : public AbstractResolverCallback {
-public:
- ResolverCallbackDirect(
- const isc::nsas::ResolverInterface::CallbackPtr callback,
- isc::dns::MessagePtr answer_message) :
- callback_(callback),
- answer_message_(answer_message) {}
- void callback(bool result);
-
-private:
- const isc::nsas::ResolverInterface::CallbackPtr callback_;
- isc::dns::MessagePtr answer_message_;
-};
-
-
/// \brief The \c DNSLookup class is an abstract base class for a DNS
/// Lookup provider function.
///
diff --git a/src/lib/resolve/Makefile.am b/src/lib/resolve/Makefile.am
new file mode 100644
index 0000000..c242569
--- /dev/null
+++ b/src/lib/resolve/Makefile.am
@@ -0,0 +1,15 @@
+SUBDIRS = . tests
+
+AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
+AM_CPPFLAGS += -I$(top_srcdir)/src/lib/dns -I$(top_builddir)/src/lib/dns
+AM_CPPFLAGS += $(BOOST_INCLUDES)
+AM_CPPFLAGS += $(SQLITE_CFLAGS)
+
+AM_CXXFLAGS = $(B10_CXXFLAGS)
+
+CLEANFILES = *.gcno *.gcda
+
+lib_LTLIBRARIES = libresolve.la
+libresolve_la_SOURCES = resolve.h resolve.cc
+libresolve_la_LIBADD = $(top_builddir)/src/lib/dns/libdns++.la
+libresolve_la_LIBADD += $(top_builddir)/src/lib/exceptions/libexceptions.la
diff --git a/src/lib/resolve/resolve.cc b/src/lib/resolve/resolve.cc
new file mode 100644
index 0000000..c42ac85
--- /dev/null
+++ b/src/lib/resolve/resolve.cc
@@ -0,0 +1,46 @@
+// Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+#include <resolve/resolve.h>
+
+namespace isc {
+namespace resolve {
+
+void
+ResolverCallbackServer::callback(bool result) {
+ server_->resume(result);
+ delete server_;
+ delete this;
+}
+
+void
+ResolverCallbackDirect::callback(bool result)
+{
+ // simply return with the first rrset from answer right now
+ if (result &&
+ answer_message_->getRcode() == isc::dns::Rcode::NOERROR() &&
+ answer_message_->getRRCount(isc::dns::Message::SECTION_ANSWER) > 0) {
+ std::cout << *answer_message_ << std::endl;
+ isc::dns::RRsetIterator rrsi = answer_message_->beginSection(isc::dns::Message::SECTION_ANSWER);
+ const isc::dns::RRsetPtr result = *rrsi;
+ callback_->success(result);
+ } else {
+ callback_->failure();
+ }
+ // once called back we don't need ourselves anymore
+ delete this;
+}
+
+} // namespace resolve
+} // namespace isc
diff --git a/src/lib/resolve/resolve.h b/src/lib/resolve/resolve.h
new file mode 100644
index 0000000..eb69399
--- /dev/null
+++ b/src/lib/resolve/resolve.h
@@ -0,0 +1,62 @@
+// Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+#ifndef _ISC_RESOLVE_H
+#define _ISC_RESOLVE_H 1
+
+#include <asiolink/asiolink.h>
+
+namespace isc {
+namespace resolve {
+
+// We define two types of callbackholders for processing recursive
+// queries; one calls back the original DNSServer to resume()
+// the other uses direct callbacks (for instance when we need to
+// resolve something ourselves)
+// Caller warning: only callback once! The objects will delete
+// themselves on callback (after they have done they callback)
+class AbstractResolverCallback {
+public:
+ ~AbstractResolverCallback() {};
+ virtual void callback(bool result) = 0;
+};
+
+class ResolverCallbackServer : public AbstractResolverCallback {
+public:
+ ResolverCallbackServer(asiolink::DNSServer* server) :
+ server_(server->clone()) {}
+ void callback(bool result);
+
+private:
+ asiolink::DNSServer* server_;
+};
+
+class ResolverCallbackDirect : public AbstractResolverCallback {
+public:
+ ResolverCallbackDirect(
+ const isc::nsas::ResolverInterface::CallbackPtr callback,
+ isc::dns::MessagePtr answer_message) :
+ callback_(callback),
+ answer_message_(answer_message) {}
+ void callback(bool result);
+
+private:
+ const isc::nsas::ResolverInterface::CallbackPtr callback_;
+ isc::dns::MessagePtr answer_message_;
+};
+
+} //namespace resolve
+} //namespace isc
+
+#endif // ISC_RESOLVE_H_
diff --git a/src/lib/resolve/tests/run_unittests.cc b/src/lib/resolve/tests/run_unittests.cc
new file mode 100644
index 0000000..f80e167
--- /dev/null
+++ b/src/lib/resolve/tests/run_unittests.cc
@@ -0,0 +1,24 @@
+// Copyright (C) 2009 Internet Systems Consortium, Inc. ("ISC")
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+// PERFORMANCE OF THIS SOFTWARE.
+
+#include <gtest/gtest.h>
+
+#include <dns/tests/unittest_util.h>
+
+int
+main(int argc, char* argv[]) {
+ ::testing::InitGoogleTest(&argc, argv);
+
+ return (RUN_ALL_TESTS());
+}
More information about the bind10-changes
mailing list