DNS resolver now detects IPv6 IPs too.
authorGuilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
Wed, 26 Oct 2011 21:30:22 +0000 (19:30 -0200)
committerGuilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
Wed, 26 Oct 2011 21:30:22 +0000 (19:30 -0200)
- Also changed the detection mechanism from C fashioned to C++ boost style

src/dns/dnsresolver.cpp

index 98e6afa..1fcfb77 100644 (file)
@@ -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<HostAddress> 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<HostAddress> 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;