From: Guilherme Maciel Ferreira Date: Wed, 26 Oct 2011 21:30:22 +0000 (-0200) Subject: DNS resolver now detects IPv6 IPs too. X-Git-Tag: v1.2~48 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=f8a5ebfbcb3f43478e7d977ecf0fcabab8816500;p=pingcheck DNS resolver now detects IPv6 IPs too. - Also changed the detection mechanism from C fashioned to C++ boost style --- diff --git a/src/dns/dnsresolver.cpp b/src/dns/dnsresolver.cpp index 98e6afa..1fcfb77 100644 --- a/src/dns/dnsresolver.cpp +++ b/src/dns/dnsresolver.cpp @@ -189,23 +189,30 @@ bool DnsResolver::handle_ip_address() { BOOST_ASSERT( !HostDnsAddress.empty() ); - struct in_addr dummy_conversion; - - // Convert string to IP address - // Note: IPv4 only - if ( inet_aton(HostDnsAddress.c_str(), &dummy_conversion) != 0 ) + try { - std::list new_host_list; + // Convert string to IP address + // Work with both IPv4 and IPv6 + address addr = address::from_string( HostDnsAddress ); - HostAddress ip_host( HostDnsAddress, 86400 * 365); // set fake TTL to one year - new_host_list.push_back( ip_host ); + if ( addr.is_v4() || addr.is_v6() ) + { + std::list new_host_list; - // Activate new host list - ResolvedHostAddressList.swap( new_host_list ); + HostAddress ip_host( HostDnsAddress, 86400 * 365 ); // set fake TTL to one year + new_host_list.push_back( ip_host ); - GlobalLogger.info() << "host is already an IP: " << HostDnsAddress << endl; + // Activate new host list + ResolvedHostAddressList.swap( new_host_list ); - return true; + GlobalLogger.info() << "Host is already an IP: " << HostDnsAddress << endl; + + return true; + } + } + catch ( const boost::system::system_error & ex ) + { + GlobalLogger.info() << "Host is not an IP: " << HostDnsAddress << endl; } return false;