From f8a5ebfbcb3f43478e7d977ecf0fcabab8816500 Mon Sep 17 00:00:00 2001 From: Guilherme Maciel Ferreira Date: Wed, 26 Oct 2011 19:30:22 -0200 Subject: [PATCH] DNS resolver now detects IPv6 IPs too. - Also changed the detection mechanism from C fashioned to C++ boost style --- src/dns/dnsresolver.cpp | 31 +++++++++++++++++++------------ 1 files changed, 19 insertions(+), 12 deletions(-) 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; -- 1.7.1