Commit 8fc7cdd2 authored by Ocean Wang's avatar Ocean Wang

[trac751] Move dns related code to asiodns lib

parent 8fdbc3e4
...@@ -643,6 +643,7 @@ AC_CONFIG_FILES([Makefile ...@@ -643,6 +643,7 @@ AC_CONFIG_FILES([Makefile
src/lib/asiolink/Makefile src/lib/asiolink/Makefile
src/lib/asiolink/tests/Makefile src/lib/asiolink/tests/Makefile
src/lib/asiodns/Makefile src/lib/asiodns/Makefile
src/lib/asiodns/tests/Makefile
src/lib/bench/Makefile src/lib/bench/Makefile
src/lib/bench/example/Makefile src/lib/bench/example/Makefile
src/lib/bench/tests/Makefile src/lib/bench/tests/Makefile
......
...@@ -19,6 +19,7 @@ libasiodns_la_SOURCES += dns_server.h ...@@ -19,6 +19,7 @@ libasiodns_la_SOURCES += dns_server.h
libasiodns_la_SOURCES += dns_service.cc dns_service.h libasiodns_la_SOURCES += dns_service.cc dns_service.h
libasiodns_la_SOURCES += tcp_server.cc tcp_server.h libasiodns_la_SOURCES += tcp_server.cc tcp_server.h
libasiodns_la_SOURCES += udp_server.cc udp_server.h libasiodns_la_SOURCES += udp_server.cc udp_server.h
libasiodns_la_SOURCES += io_fetch.cc io_fetch.h
# Note: the ordering matters: -Wno-... must follow -Wextra (defined in # Note: the ordering matters: -Wno-... must follow -Wextra (defined in
# B10_CXXFLAGS) # B10_CXXFLAGS)
......
...@@ -16,8 +16,11 @@ ...@@ -16,8 +16,11 @@
#define __ASIOLINK_DNS_ANSWER_H 1 #define __ASIOLINK_DNS_ANSWER_H 1
#include <asiolink/io_message.h> #include <asiolink/io_message.h>
#include <dns/buffer.h>
#include <dns/message.h>
namespace asiolink { namespace isc {
namespace asiodns {
/// \brief The \c DNSAnswer class is an abstract base class for a DNS /// \brief The \c DNSAnswer class is an abstract base class for a DNS
/// Answer provider function. /// Answer provider function.
...@@ -63,11 +66,12 @@ public: ...@@ -63,11 +66,12 @@ public:
/// \param answer_message The DNS MessagePtr of the answer we are /// \param answer_message The DNS MessagePtr of the answer we are
/// building /// building
/// \param buffer Intermediate data results are put here /// \param buffer Intermediate data results are put here
virtual void operator()(const IOMessage& io_message, virtual void operator()(const asiolink::IOMessage& io_message,
isc::dns::MessagePtr query_message, isc::dns::MessagePtr query_message,
isc::dns::MessagePtr answer_message, isc::dns::MessagePtr answer_message,
isc::dns::OutputBufferPtr buffer) const = 0; isc::dns::OutputBufferPtr buffer) const = 0;
}; };
} // namespace asiolink } // namespace asiodns
} // namespace isc
#endif // __ASIOLINK_DNS_ANSWER_H #endif // __ASIOLINK_DNS_ANSWER_H
...@@ -16,11 +16,12 @@ ...@@ -16,11 +16,12 @@
#define __ASIOLINK_DNS_LOOKUP_H 1 #define __ASIOLINK_DNS_LOOKUP_H 1
#include <asiolink/io_message.h> #include <asiolink/io_message.h>
#include <asiolink/dns_server.h> #include <asiodns/dns_server.h>
#include <dns/buffer.h> #include <dns/buffer.h>
#include <dns/message.h> #include <dns/message.h>
namespace asiolink { namespace isc {
namespace asiodns {
/// \brief The \c DNSLookup class is an abstract base class for a DNS /// \brief The \c DNSLookup class is an abstract base class for a DNS
/// Lookup provider function. /// Lookup provider function.
...@@ -67,7 +68,7 @@ public: ...@@ -67,7 +68,7 @@ public:
/// this MessagePtr /// this MessagePtr
/// \param buffer The final answer is put here /// \param buffer The final answer is put here
/// \param server DNSServer object to use /// \param server DNSServer object to use
virtual void operator()(const IOMessage& io_message, virtual void operator()(const asiolink::IOMessage& io_message,
isc::dns::MessagePtr message, isc::dns::MessagePtr message,
isc::dns::MessagePtr answer_message, isc::dns::MessagePtr answer_message,
isc::dns::OutputBufferPtr buffer, isc::dns::OutputBufferPtr buffer,
...@@ -79,5 +80,6 @@ private: ...@@ -79,5 +80,6 @@ private:
DNSLookup* self_; DNSLookup* self_;
}; };
} // namespace asiolink } // namespace asiodns
} // namespace isc
#endif // __ASIOLINK_DNS_LOOKUP_H #endif // __ASIOLINK_DNS_LOOKUP_H
...@@ -17,7 +17,8 @@ ...@@ -17,7 +17,8 @@
#include <asiolink/io_message.h> #include <asiolink/io_message.h>
namespace asiolink { namespace isc {
namespace asiodns {
/// \brief The \c DNSServer class is a wrapper (and base class) for /// \brief The \c DNSServer class is a wrapper (and base class) for
/// classes which provide DNS server functionality. /// classes which provide DNS server functionality.
...@@ -34,7 +35,7 @@ namespace asiolink { ...@@ -34,7 +35,7 @@ namespace asiolink {
/// instantiated through a base class) are sometimes passed by /// instantiated through a base class) are sometimes passed by
/// reference (as this superclass); calls to methods in the base /// reference (as this superclass); calls to methods in the base
/// class are then rerouted via this pointer to methods in the derived /// class are then rerouted via this pointer to methods in the derived
/// class. This allows code from outside asiolink, with no specific /// class. This allows code from outside asiodns, with no specific
/// knowledge of \c TCPServer or \c UDPServer, to access their methods. /// knowledge of \c TCPServer or \c UDPServer, to access their methods.
/// ///
/// This class is both assignable and copy-constructable. Its subclasses /// This class is both assignable and copy-constructable. Its subclasses
...@@ -151,5 +152,6 @@ private: ...@@ -151,5 +152,6 @@ private:
}; };
} // asiolink } // namespace asiodns
} // namespace isc
#endif // __ASIOLINK_DNS_SERVER_H #endif // __ASIOLINK_DNS_SERVER_H
...@@ -23,11 +23,11 @@ ...@@ -23,11 +23,11 @@
#include <log/dummylog.h> #include <log/dummylog.h>
#include <asio.hpp> #include <asio.hpp>
#include <asiolink/dns_service.h> #include <dns_service.h>
#include <asiolink/io_service.h> #include <asiolink/io_service.h>
#include <asiolink/io_service.h> #include <asiolink/io_service.h>
#include <asiolink/tcp_server.h> #include <tcp_server.h>
#include <asiolink/udp_server.h> #include <udp_server.h>
#include <log/dummylog.h> #include <log/dummylog.h>
...@@ -36,9 +36,11 @@ ...@@ -36,9 +36,11 @@
using isc::log::dlog; using isc::log::dlog;
namespace asiolink { using namespace isc::asiolink;
namespace isc {
namespace asiodns {
class SimpleCallback;
class DNSLookup; class DNSLookup;
class DNSAnswer; class DNSAnswer;
...@@ -195,6 +197,5 @@ DNSService::clearServers() { ...@@ -195,6 +197,5 @@ DNSService::clearServers() {
impl_->servers_.clear(); impl_->servers_.clear();
} }
} // namespace asiodns
} // namespace isc
} // namespace asiolink
...@@ -18,10 +18,11 @@ ...@@ -18,10 +18,11 @@
#include <resolve/resolver_interface.h> #include <resolve/resolver_interface.h>
#include <asiolink/io_service.h> #include <asiolink/io_service.h>
#include <asiolink/simple_callback.h>
namespace asiolink { namespace isc {
namespace asiodns {
class SimpleCallback;
class DNSLookup; class DNSLookup;
class DNSAnswer; class DNSAnswer;
class DNSServiceImpl; class DNSServiceImpl;
...@@ -54,8 +55,8 @@ public: ...@@ -54,8 +55,8 @@ public:
/// \param checkin Provider for cc-channel events (see \c SimpleCallback) /// \param checkin Provider for cc-channel events (see \c SimpleCallback)
/// \param lookup The lookup provider (see \c DNSLookup) /// \param lookup The lookup provider (see \c DNSLookup)
/// \param answer The answer provider (see \c DNSAnswer) /// \param answer The answer provider (see \c DNSAnswer)
DNSService(IOService& io_service, const char& port, DNSService(asiolink::IOService& io_service, const char& port,
const char& address, SimpleCallback* checkin, const char& address, isc::asiolink::SimpleCallback* checkin,
DNSLookup* lookup, DNSAnswer* answer); DNSLookup* lookup, DNSAnswer* answer);
/// \brief The constructor with a specific port on which the services /// \brief The constructor with a specific port on which the services
/// listen on. /// listen on.
...@@ -71,14 +72,14 @@ public: ...@@ -71,14 +72,14 @@ public:
/// \param checkin Provider for cc-channel events (see \c SimpleCallback) /// \param checkin Provider for cc-channel events (see \c SimpleCallback)
/// \param lookup The lookup provider (see \c DNSLookup) /// \param lookup The lookup provider (see \c DNSLookup)
/// \param answer The answer provider (see \c DNSAnswer) /// \param answer The answer provider (see \c DNSAnswer)
DNSService(IOService& io_service, const char& port, DNSService(asiolink::IOService& io_service, const char& port,
const bool use_ipv4, const bool use_ipv6, const bool use_ipv4, const bool use_ipv6,
SimpleCallback* checkin, DNSLookup* lookup, isc::asiolink::SimpleCallback* checkin, DNSLookup* lookup,
DNSAnswer* answer); DNSAnswer* answer);
/// \brief The constructor without any servers. /// \brief The constructor without any servers.
/// ///
/// Use addServer() to add some servers. /// Use addServer() to add some servers.
DNSService(IOService& io_service, SimpleCallback* checkin, DNSService(asiolink::IOService& io_service, isc::asiolink::SimpleCallback* checkin,
DNSLookup* lookup, DNSAnswer* answer); DNSLookup* lookup, DNSAnswer* answer);
/// \brief The destructor. /// \brief The destructor.
~DNSService(); ~DNSService();
...@@ -105,8 +106,9 @@ public: ...@@ -105,8 +106,9 @@ public:
private: private:
DNSServiceImpl* impl_; DNSServiceImpl* impl_;
IOService& io_service_; asiolink::IOService& io_service_;
}; };
} // namespace asiolink } // namespace asiodns
} // namespace isc
#endif // __ASIOLINK_DNS_SERVICE_H #endif // __ASIOLINK_DNS_SERVICE_H
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include <asiolink/io_address.h> #include <asiolink/io_address.h>
#include <asiolink/io_asio_socket.h> #include <asiolink/io_asio_socket.h>
#include <asiolink/io_endpoint.h> #include <asiolink/io_endpoint.h>
#include <asiolink/io_fetch.h>
#include <asiolink/io_service.h> #include <asiolink/io_service.h>
#include <asiolink/tcp_endpoint.h> #include <asiolink/tcp_endpoint.h>
#include <asiolink/tcp_socket.h> #include <asiolink/tcp_socket.h>
...@@ -45,18 +44,22 @@ ...@@ -45,18 +44,22 @@
#include <asiolink/udp_socket.h> #include <asiolink/udp_socket.h>
#include <asiolink/qid_gen.h> #include <asiolink/qid_gen.h>
#include "io_fetch.h"
#include <stdint.h> #include <stdint.h>
using namespace asio; using namespace asio;
using namespace isc::asiolink;
using namespace isc::dns; using namespace isc::dns;
using namespace isc::log; using namespace isc::log;
using namespace std; using namespace std;
namespace asiolink { namespace isc {
namespace asiodns {
/// Use the ASIO logger /// Use the ASIO logger
isc::log::Logger logger("asiolink"); isc::log::Logger logger("asiodns");
/// \brief IOFetch Data /// \brief IOFetch Data
/// ///
...@@ -376,5 +379,6 @@ void IOFetch::logIOFailure(asio::error_code ec) { ...@@ -376,5 +379,6 @@ void IOFetch::logIOFailure(asio::error_code ec) {
static_cast<int>(data_->remote_snd->getPort())); static_cast<int>(data_->remote_snd->getPort()));
} }
} // namespace asiolink } // namespace asiodns
} // namespace isc
...@@ -24,16 +24,17 @@ ...@@ -24,16 +24,17 @@
#include <coroutine.h> #include <coroutine.h>
#include <asio/error_code.hpp> #include <asio/error_code.hpp>
#include <asiolink/io_service.h>
#include <asiolink/io_address.h>
#include <dns/buffer.h> #include <dns/buffer.h>
#include <dns/question.h> #include <dns/question.h>
namespace asiolink { namespace isc {
namespace asiodns {
// Forward declarations // Forward declarations
class IOAddress;
class IOFetchData; class IOFetchData;
class IOService;
/// \brief Upstream Fetch Processing /// \brief Upstream Fetch Processing
/// ///
...@@ -132,8 +133,9 @@ public: ...@@ -132,8 +133,9 @@ public:
/// (default = 53) /// (default = 53)
/// \param wait Timeout for the fetch (in ms). The default value of /// \param wait Timeout for the fetch (in ms). The default value of
/// -1 indicates no timeout. /// -1 indicates no timeout.
IOFetch(Protocol protocol, IOService& service, IOFetch(Protocol protocol, isc::asiolink::IOService& service,
const isc::dns::Question& question, const IOAddress& address, const isc::dns::Question& question,
const isc::asiolink::IOAddress& address,
uint16_t port, isc::dns::OutputBufferPtr& buff, Callback* cb, uint16_t port, isc::dns::OutputBufferPtr& buff, Callback* cb,
int wait = -1); int wait = -1);
...@@ -174,6 +176,7 @@ private: ...@@ -174,6 +176,7 @@ private:
}; };
} // namespace asiolink } // namespace asiodns
} // namespace isc
#endif // __IO_FETCH_H #endif // __IO_FETCH_H
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include <asiolink/dummy_io_cb.h> #include <asiolink/dummy_io_cb.h>
#include <asiolink/tcp_endpoint.h> #include <asiolink/tcp_endpoint.h>
#include <asiolink/tcp_socket.h> #include <asiolink/tcp_socket.h>
#include <asiolink/tcp_server.h> #include <tcp_server.h>
using namespace asio; using namespace asio;
...@@ -36,8 +36,10 @@ using asio::ip::tcp; ...@@ -36,8 +36,10 @@ using asio::ip::tcp;
using namespace std; using namespace std;
using namespace isc::dns; using namespace isc::dns;
using namespace isc::asiolink;
namespace asiolink { namespace isc {
namespace asiodns {
/// The following functions implement the \c TCPServer class. /// The following functions implement the \c TCPServer class.
/// ///
...@@ -235,5 +237,5 @@ TCPServer::resume(const bool done) { ...@@ -235,5 +237,5 @@ TCPServer::resume(const bool done) {
io_.post(*this); io_.post(*this);
} }
} // namespace asiolink } // namespace asiodns
} // namespace isc
...@@ -24,9 +24,12 @@ ...@@ -24,9 +24,12 @@
#include <asiolink/asiolink.h> #include <asiolink/asiolink.h>
#include <coroutine.h> #include <coroutine.h>
#include "dns_server.h"
#include "dns_lookup.h"
#include "dns_answer.h"
namespace isc {
namespace asiolink { namespace asiodns {
/// \brief A TCP-specific \c DNSServer object. /// \brief A TCP-specific \c DNSServer object.
/// ///
...@@ -36,7 +39,7 @@ class TCPServer : public virtual DNSServer, public virtual coroutine { ...@@ -36,7 +39,7 @@ class TCPServer : public virtual DNSServer, public virtual coroutine {
public: public:
explicit TCPServer(asio::io_service& io_service, explicit TCPServer(asio::io_service& io_service,
const asio::ip::address& addr, const uint16_t port, const asio::ip::address& addr, const uint16_t port,
const SimpleCallback* checkin = NULL, const isc::asiolink::SimpleCallback* checkin = NULL,
const DNSLookup* lookup = NULL, const DNSLookup* lookup = NULL,
const DNSAnswer* answer = NULL); const DNSAnswer* answer = NULL);
...@@ -95,7 +98,7 @@ private: ...@@ -95,7 +98,7 @@ private:
// \c IOMessage and \c Message objects to be passed to the // \c IOMessage and \c Message objects to be passed to the
// DNS lookup and answer providers // DNS lookup and answer providers
boost::shared_ptr<asiolink::IOMessage> io_message_; boost::shared_ptr<isc::asiolink::IOMessage> io_message_;
isc::dns::MessagePtr query_message_; isc::dns::MessagePtr query_message_;
isc::dns::MessagePtr answer_message_; isc::dns::MessagePtr answer_message_;
...@@ -108,13 +111,14 @@ private: ...@@ -108,13 +111,14 @@ private:
bool done_; bool done_;
// Callback functions provided by the caller // Callback functions provided by the caller
const SimpleCallback* checkin_callback_; const isc::asiolink::SimpleCallback* checkin_callback_;
const DNSLookup* lookup_callback_; const DNSLookup* lookup_callback_;
const DNSAnswer* answer_callback_; const DNSAnswer* answer_callback_;
boost::shared_ptr<IOEndpoint> peer_; boost::shared_ptr<isc::asiolink::IOEndpoint> peer_;
boost::shared_ptr<IOSocket> iosock_; boost::shared_ptr<isc::asiolink::IOSocket> iosock_;
}; };
} // namespace asiolink } // namespace asiodns
} // namespace isc
#endif // __TCP_SERVER_H #endif // __TCP_SERVER_H
...@@ -16,8 +16,11 @@ TESTS = ...@@ -16,8 +16,11 @@ TESTS =
if HAVE_GTEST if HAVE_GTEST
TESTS += run_unittests TESTS += run_unittests
run_unittests_SOURCES = run_unittests.cc run_unittests_SOURCES = run_unittests.cc
run_unittests_SOURCES += $(top_srcdir)/src/lib/dns/tests/unittest_util.h
run_unittests_SOURCES += $(top_srcdir)/src/lib/dns/tests/unittest_util.cc
run_unittests_SOURCES += io_service_unittest.cc run_unittests_SOURCES += io_service_unittest.cc
run_unittests_SOURCES += dns_server_unittest.cc run_unittests_SOURCES += dns_server_unittest.cc
run_unittests_SOURCES += io_fetch_unittest.cc
run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES) run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
...@@ -27,6 +30,7 @@ run_unittests_LDADD += $(top_builddir)/src/lib/dns/libdns++.la ...@@ -27,6 +30,7 @@ run_unittests_LDADD += $(top_builddir)/src/lib/dns/libdns++.la
run_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libasiolink.la run_unittests_LDADD += $(top_builddir)/src/lib/asiolink/libasiolink.la
run_unittests_LDADD += $(top_builddir)/src/lib/log/liblog.la run_unittests_LDADD += $(top_builddir)/src/lib/log/liblog.la
run_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libexceptions.la run_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libexceptions.la
run_unittests_LDADD += $(top_builddir)/src/lib/asiodns/libasiodns.la
run_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS) run_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
......
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
#include <asio.hpp> #include <asio.hpp>
#include <asiolink/io_endpoint.h> #include <asiolink/io_endpoint.h>
#include <asiolink/io_error.h> #include <asiolink/io_error.h>
#include <asiolink/udp_server.h> #include <asiodns/udp_server.h>
#include <asiolink/tcp_server.h> #include <asiodns/tcp_server.h>
#include <asiolink/dns_answer.h> #include <asiodns/dns_answer.h>
#include <asiolink/dns_lookup.h> #include <asiodns/dns_lookup.h>
#include <string> #include <string>
#include <csignal> #include <csignal>
#include <unistd.h> //for alarm #include <unistd.h> //for alarm
...@@ -65,7 +65,8 @@ ...@@ -65,7 +65,8 @@
/// involved so the message sending between client and server is plain text /// involved so the message sending between client and server is plain text
/// And the valid checker, question lookup and answer composition are dummy. /// And the valid checker, question lookup and answer composition are dummy.
using namespace asiolink; using namespace isc::asiolink;
using namespace isc::asiodns;
using namespace asio; using namespace asio;
namespace { namespace {
static const std::string server_ip = "127.0.0.1"; static const std::string server_ip = "127.0.0.1";
......
...@@ -37,15 +37,17 @@ ...@@ -37,15 +37,17 @@
#include <asiolink/asiolink_utilities.h> #include <asiolink/asiolink_utilities.h>
#include <asiolink/io_address.h> #include <asiolink/io_address.h>
#include <asiolink/io_endpoint.h> #include <asiolink/io_endpoint.h>
#include <asiolink/io_fetch.h>
#include <asiolink/io_service.h> #include <asiolink/io_service.h>
#include <asiodns/io_fetch.h>
using namespace asio; using namespace asio;
using namespace isc::dns; using namespace isc::dns;
using namespace asio::ip; using namespace asio::ip;
using namespace std; using namespace std;
using namespace isc::asiolink;
namespace asiolink { namespace isc {
namespace asiodns {
const asio::ip::address TEST_HOST(asio::ip::address::from_string("127.0.0.1")); const asio::ip::address TEST_HOST(asio::ip::address::from_string("127.0.0.1"));
const uint16_t TEST_PORT(5301);