From 86f587a5f1e965c1e037095e4dd7cb37fa1907fc Mon Sep 17 00:00:00 2001 From: Guilherme Maciel Ferreira Date: Sun, 26 Feb 2012 19:36:29 -0300 Subject: [PATCH] Code improvement: - using STL rotate algorithm; - and parameterized the fill_answers_list() method. --- src/dns/dnsresolver.cpp | 22 +++++++++++++--------- src/dns/dnsresolver.h | 3 ++- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/dns/dnsresolver.cpp b/src/dns/dnsresolver.cpp index 40b1477..40aaaae 100644 --- a/src/dns/dnsresolver.cpp +++ b/src/dns/dnsresolver.cpp @@ -19,6 +19,7 @@ on this file might be covered by the GNU General Public License. */ #include "dns/dnsresolver.h" +#include #include #include @@ -38,6 +39,7 @@ using boost::net::dns::a_resource; using boost::net::dns::resource_base_t; using boost::net::dns::message; using boost::net::dns::rr_list_t; +using boost::net::dns::type_t; using boost::shared_ptr; using I2n::Logger::GlobalLogger; @@ -84,12 +86,11 @@ bool DnsResolver::resolve() return true; } - GlobalLogger.info() << "Resolved IP(s) for host : " - << HostDnsAddress << endl; + GlobalLogger.info() << "Resolved IP(s) for host : " << HostDnsAddress << endl; try { - rr_list_t answers_list = fill_answers_list( HostDnsAddress, NameServer); + rr_list_t answers_list = fill_answers_list( HostDnsAddress, NameServer, boost::net::dns::type_a ); size_t resolved_ip_count = answers_list.size(); if ( resolved_ip_count < 1 ) @@ -142,10 +143,10 @@ string DnsResolver::get_next_ip() size_t list_size_before = ResolvedHostAddressList.size(); HostAddress host_address = ResolvedHostAddressList.front(); - ResolvedHostAddressList.pop_front(); string destination_ip = host_address.get_ip(); uint32_t ttl = host_address.get_ttl().get_updated_value(); - ResolvedHostAddressList.push_back( host_address ); + + rotate( ResolvedHostAddressList.begin(), ++ResolvedHostAddressList.begin(), ResolvedHostAddressList.end() ); size_t list_size_after = ResolvedHostAddressList.size(); @@ -178,11 +179,11 @@ bool DnsResolver::expired_resolved_ip() const } /** - * @brief Check if hostname is already an IPv4 address. Will insert it into + * @brief Check if hostname is already an IP address. Will insert it into * #ResolvedHostAddressList. * * @param host_dns_address - * @return bool True if already an ip, false if not + * @return bool @c true if the address is already an IP, @c false if not. **/ bool DnsResolver::handle_ip_address() { @@ -219,7 +220,8 @@ bool DnsResolver::handle_ip_address() rr_list_t DnsResolver::fill_answers_list( const string &host_dns_address, - const string &name_server + const string &name_server, + const type_t message_type ) const { BOOST_ASSERT( !host_dns_address.empty() ); @@ -228,8 +230,10 @@ rr_list_t DnsResolver::fill_answers_list( address nameServer( address::from_string( name_server ) ); boost::net::dns::resolve resolver; resolver.addServer( nameServer ); - message dns_message( host_dns_address, boost::net::dns::type_a ); + + message dns_message( host_dns_address, message_type ); message& dns_packet = resolver.query( dns_message ); + // Note: perform a copy of each element from one vector to the other, do not reference return *dns_packet.answers(); } diff --git a/src/dns/dnsresolver.h b/src/dns/dnsresolver.h index 95a2eaf..b24cb2c 100644 --- a/src/dns/dnsresolver.h +++ b/src/dns/dnsresolver.h @@ -52,7 +52,8 @@ private: boost::net::dns::rr_list_t fill_answers_list( const std::string &host_dns_address, - const std::string &name_server + const std::string &name_server, + const boost::net::dns::type_t message_type ) const; void fill_resolved_ip_list( const boost::net::dns::rr_list_t& answers_list, -- 1.7.1