From 79ab42219e0a78bf56c5cd17d4077ffef1d8f538 Mon Sep 17 00:00:00 2001 From: Thomas Jarosch Date: Wed, 4 May 2011 11:59:43 +0200 Subject: [PATCH] Fix ping of IP addresses (don't do DNS lookup) --- src/dns/dnsresolver.cpp | 35 +++++++++++++++++++++++++++++++++++ src/dns/dnsresolver.h | 1 + 2 files changed, 36 insertions(+), 0 deletions(-) diff --git a/src/dns/dnsresolver.cpp b/src/dns/dnsresolver.cpp index 1aba3f2..a649c13 100644 --- a/src/dns/dnsresolver.cpp +++ b/src/dns/dnsresolver.cpp @@ -40,6 +40,37 @@ DnsResolver::~DnsResolver() } /** + * @brief Check if hostname is already an IPv4 address. + * Will insert it into #ResolvedHostAddressList. + * + * @param host_dns_address + * @return bool True if already an ip, false if not + **/ +bool DnsResolver::handle_ip_address() +{ + struct in_addr dummy_conversion; + + // Convert string to IP address + // Note: IPv4 only + if (inet_aton(HostDnsAddress.c_str(), &dummy_conversion) != 0) + { + std::list new_host_list; + + HostAddress ip_host( HostDnsAddress, 86400 * 365); // set fake TTL to one year + new_host_list.push_back( ip_host ); + + // Activate new host list + ResolvedHostAddressList.swap(new_host_list); + + GlobalLogger.info() << "host is already an IP: " << HostDnsAddress << endl; + + return true; + } + + return false; +} + +/** * Resolve the IPs from this DNS and build a list of these IPs. * * @return true if the host address could be resolved, or false otherwise. @@ -49,6 +80,10 @@ bool DnsResolver::resolve() BOOST_ASSERT( !HostDnsAddress.empty() ); BOOST_ASSERT( !NameServer.empty() ); + // Handle IP addresses in HostDnsAddress + if (handle_ip_address()) + return true; + GlobalLogger.info() << "Resolved IP(s) for host : " << HostDnsAddress << endl; diff --git a/src/dns/dnsresolver.h b/src/dns/dnsresolver.h index 6c46218..808e138 100644 --- a/src/dns/dnsresolver.h +++ b/src/dns/dnsresolver.h @@ -37,6 +37,7 @@ private: std::list *resolved_host_address_list ); + bool handle_ip_address(); private: /// the list of IPs available to the host DNS std::list ResolvedHostAddressList; -- 1.7.1