]> sjero.net Git - wget/commitdiff
Properly format IPv6 addresses.
authorSasikantha Babu <sasikanth.v19@gmail.com>
Sun, 8 Jan 2012 23:03:23 +0000 (00:03 +0100)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Sun, 8 Jan 2012 23:03:23 +0000 (00:03 +0100)
src/ChangeLog
src/connect.c
src/connect.h
src/http.c

index 8db453b0120b4c2858fcc5c3fdc9a0d6ce2c368f..e58decb5ff8dfe7c4bcb30457c367751398cc9d5 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-09  Sasikantha Babu   <sasikanth.v19@gmail.com> (tiny change)
+       * connect.c (connect_to_ip): properly formatted ipv6 address display.
+       (socket_family): New function - returns socket family type.
+       * http.c (gethttp): properly formatted ipv6 address display.
+
 2011-11-09  Gijs van Tulder  <address@hidden>
 
        * warc.c: Call gzdopen() with wb9 instead of wb+9, which fails on
index 6008c3c2cb5e95e7cae011e1dc4dd7a301c17baf..34b40abc5abcfb225a043f88ee55df8f5e0a5b0c 100644 (file)
@@ -298,7 +298,12 @@ connect_to_ip (const ip_address *ip, int port, const char *print)
                                          xfree (str);
         }
       else
-        logprintf (LOG_VERBOSE, _("Connecting to %s:%d... "), txt_addr, port);
+       {
+           if (ip->family == AF_INET)
+               logprintf (LOG_VERBOSE, _("Connecting to %s:%d... "), txt_addr, port);
+           else if (ip->family == AF_INET6)
+               logprintf (LOG_VERBOSE, _("Connecting to [%s]:%d... "), txt_addr, port);
+       }
     }
 
   /* Store the sockaddr info to SA.  */
@@ -586,6 +591,36 @@ socket_ip_address (int sock, ip_address *ip, int endpoint)
     }
 }
 
+/* Get the socket family of connection on FD and store
+   Return family type on success, -1 otherwise.
+
+   If ENDPOINT is ENDPOINT_LOCAL, it returns the sock family of the local
+   (client) side of the socket.  Else if ENDPOINT is ENDPOINT_PEER, it
+   returns the sock family of the remote (peer's) side of the socket.  */
+
+int
+socket_family (int sock, int endpoint)
+{
+  struct sockaddr_storage storage;
+  struct sockaddr *sockaddr = (struct sockaddr *) &storage;
+  socklen_t addrlen = sizeof (storage);
+  int ret;
+
+  memset (sockaddr, 0, addrlen);
+
+  if (endpoint == ENDPOINT_LOCAL)
+    ret = getsockname (sock, sockaddr, &addrlen);
+  else if (endpoint == ENDPOINT_PEER)
+    ret = getpeername (sock, sockaddr, &addrlen);
+  else
+    abort ();
+
+  if (ret < 0)
+    return -1;
+
+  return sockaddr->sa_family;
+}
+
 /* Return true if the error from the connect code can be considered
    retryable.  Wget normally retries after errors, but the exception
    are the "unsupported protocol" type errors (possible on IPv4/IPv6
index 20bb2439e6c79e88e4a39d1c592f5379131dbcb9..bb3f26a798a379e59f5152175f566d0fd006251d 100644 (file)
@@ -51,6 +51,7 @@ enum {
   ENDPOINT_PEER
 };
 bool socket_ip_address (int, ip_address *, int);
+int  socket_family (int sock, int endpoint);
 
 bool retryable_socket_connect_error (int);
 
index 6a2ffe86aa0b5c44d62aaf124d43978e8754d4cb..69789fcd4770da72ecdaf962e7f38b4c893b8c1b 100644 (file)
@@ -1951,11 +1951,17 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy,
 #endif
                                   &host_lookup_failed))
         {
+          int family = socket_family (pconn.socket, ENDPOINT_PEER);
           sock = pconn.socket;
           using_ssl = pconn.ssl;
-          logprintf (LOG_VERBOSE, _("Reusing existing connection to %s:%d.\n"),
-                     quotearg_style (escape_quoting_style, pconn.host),
-                     pconn.port);
+          if (family == AF_INET6)
+             logprintf (LOG_VERBOSE, _("Reusing existing connection to [%s]:%d.\n"),
+                        quotearg_style (escape_quoting_style, pconn.host),
+                         pconn.port);
+          else
+             logprintf (LOG_VERBOSE, _("Reusing existing connection to %s:%d.\n"),
+                        quotearg_style (escape_quoting_style, pconn.host),
+                        pconn.port);
           DEBUGP (("Reusing fd %d.\n", sock));
           if (pconn.authorized)
             /* If the connection is already authorized, the "Basic"