]> sjero.net Git - wget/blobdiff - src/host.c
[svn] IPv6 configure auto-detection.
[wget] / src / host.c
index 62485c6e879ccc0de421ad93786c499e7e18cc86..382707db4f4d151029e9e85b69326b246769ec01 100644 (file)
@@ -15,7 +15,17 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with Wget; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+In addition, as a special exception, the Free Software Foundation
+gives permission to link the code of its release of Wget with the
+OpenSSL project's "OpenSSL" library (or with modified versions of it
+that use the same license as the "OpenSSL" library), and distribute
+the linked executables.  You must obey the GNU General Public License
+in all respects for all of the code used other than "OpenSSL".  If you
+modify this file, you may extend this exception to your version of the
+file, but you are not obligated to do so.  If you do not wish to do
+so, delete this exception statement from your version.  */
 
 #include <config.h>
 
@@ -35,6 +45,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #ifdef WINDOWS
 # include <winsock.h>
+# define SET_H_ERRNO(err) WSASetLastError(err)
 #else
 # include <sys/socket.h>
 # include <netinet/in.h>
@@ -42,6 +53,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #  include <arpa/inet.h>
 # endif
 # include <netdb.h>
+# define SET_H_ERRNO(err) ((void)(h_errno = (err)))
 #endif /* WINDOWS */
 
 #ifndef NO_ADDRESS
@@ -69,7 +81,7 @@ extern int h_errno;
 # endif
 #endif
 
-#ifdef INET6
+#ifdef ENABLE_IPV6
 int     ip_default_family = AF_INET6;
 #else
 int     ip_default_family = AF_INET;
@@ -141,7 +153,7 @@ address_list_set_faulty (struct address_list *al, int index)
     al->faulty = 0;
 }
 
-#ifdef INET6
+#ifdef HAVE_GETADDRINFO
 /**
   * address_list_from_addrinfo
   *
@@ -284,7 +296,7 @@ wget_sockaddr_set_address (wget_sockaddr *sa,
        }
       return;
     }
-#ifdef INET6
+#ifdef ENABLE_IPV6
   if (ip_family == AF_INET6) 
     {
       sa->sin6.sin6_family = ip_family;
@@ -324,7 +336,7 @@ wget_sockaddr_set_port (wget_sockaddr *sa, unsigned short port)
       sa->sin.sin_port = htons (port);
       return;
     }  
-#ifdef INET6
+#ifdef ENABLE_IPV6
   if (sa->sa.sa_family == AF_INET6)
     {
       sa->sin6.sin6_port = htons (port);
@@ -354,7 +366,7 @@ wget_sockaddr_get_addr (wget_sockaddr *sa)
 { 
   if (sa->sa.sa_family == AF_INET)
     return &sa->sin.sin_addr;
-#ifdef INET6
+#ifdef ENABLE_IPV6
   if (sa->sa.sa_family == AF_INET6)
     return &sa->sin6.sin6_addr;
 #endif
@@ -383,7 +395,7 @@ wget_sockaddr_get_port (const wget_sockaddr *sa)
 {
   if (sa->sa.sa_family == AF_INET)
       return htons (sa->sin.sin_port);
-#ifdef INET6
+#ifdef ENABLE_IPV6
   if (sa->sa.sa_family == AF_INET6)
       return htons (sa->sin6.sin6_port);
 #endif
@@ -413,7 +425,7 @@ sockaddr_len ()
 {
   if (ip_default_family == AF_INET) 
     return sizeof (struct sockaddr_in);
-#ifdef INET6
+#ifdef ENABLE_IPV6
   if (ip_default_family == AF_INET6) 
     return sizeof (struct sockaddr_in6);
 #endif
@@ -428,7 +440,7 @@ sockaddr_len ()
 void 
 map_ipv4_to_ip (ip4_address *ipv4, ip_address *ip) 
 {
-#ifdef INET6
+#ifdef ENABLE_IPV6
   static unsigned char ipv64[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff};
   memcpy ((char *)ip + 12, ipv4 , 4);
   memcpy ((char *)ip + 0, ipv64, 12);
@@ -446,7 +458,7 @@ map_ipv4_to_ip (ip4_address *ipv4, ip_address *ip)
 int 
 map_ip_to_ipv4 (ip_address *ip, ip4_address *ipv4) 
 {
-#ifdef INET6
+#ifdef ENABLE_IPV6
   static unsigned char ipv64[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff};
   if (0 != memcmp (ip, ipv64, 12))
     return 0;
@@ -461,7 +473,7 @@ map_ip_to_ipv4 (ip_address *ip, ip4_address *ipv4)
 \f
 /* Versions of gethostbyname and getaddrinfo that support timeout. */
 
-#ifndef INET6
+#ifndef ENABLE_IPV6
 
 struct ghbnwt_context {
   const char *host_name;
@@ -487,7 +499,7 @@ gethostbyname_with_timeout (const char *host_name, int timeout)
   ctx.host_name = host_name;
   if (run_with_timeout (timeout, gethostbyname_with_timeout_callback, &ctx))
     {
-      h_errno = HOST_NOT_FOUND;
+      SET_H_ERRNO (HOST_NOT_FOUND);
       errno = ETIMEDOUT;
       return NULL;
     }
@@ -496,7 +508,7 @@ gethostbyname_with_timeout (const char *host_name, int timeout)
   return ctx.hptr;
 }
 
-#else  /* INET6 */
+#else  /* ENABLE_IPV6 */
 
 struct gaiwt_context {
   const char *node;
@@ -536,7 +548,7 @@ getaddrinfo_with_timeout (const char *node, const char *service,
   return ctx.exit_code;
 }
 
-#endif /* INET6 */
+#endif /* ENABLE_IPV6 */
 \f
 /* Pretty-print ADDR.  When compiled without IPv6, this is the same as
    inet_ntoa.  With IPv6, it either prints an IPv6 address or an IPv4
@@ -545,7 +557,7 @@ getaddrinfo_with_timeout (const char *node, const char *service,
 char *
 pretty_print_address (ip_address *addr)
 {
-#ifdef INET6
+#ifdef ENABLE_IPV6
   ip4_address addr4;
   static char buf[128];
 
@@ -594,7 +606,7 @@ lookup_host (const char *host, int silent)
   /* First, try to check whether the address is already a numeric
      address.  */
 
-#ifdef INET6
+#ifdef ENABLE_IPV6
   if (inet_pton (AF_INET6, host, &addr) > 0)
     return address_list_new_one (&addr);
 #endif
@@ -632,7 +644,7 @@ lookup_host (const char *host, int silent)
 
   /* Host name lookup goes on below. */
 
-#ifdef INET6
+#ifdef HAVE_GETADDRINFO
   {
     struct addrinfo hints, *ai;
     int err;