1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

Properly format IPv6 addresses.

This commit is contained in:
Sasikantha Babu 2012-01-09 00:03:23 +01:00 committed by Giuseppe Scrivano
parent c2ee928302
commit 5e1badae1e
4 changed files with 51 additions and 4 deletions

View 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> 2011-11-09 Gijs van Tulder <address@hidden>
* warc.c: Call gzdopen() with wb9 instead of wb+9, which fails on * warc.c: Call gzdopen() with wb9 instead of wb+9, which fails on

View File

@ -298,7 +298,12 @@ connect_to_ip (const ip_address *ip, int port, const char *print)
xfree (str); xfree (str);
} }
else 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. */ /* 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 /* Return true if the error from the connect code can be considered
retryable. Wget normally retries after errors, but the exception retryable. Wget normally retries after errors, but the exception
are the "unsupported protocol" type errors (possible on IPv4/IPv6 are the "unsupported protocol" type errors (possible on IPv4/IPv6

View File

@ -51,6 +51,7 @@ enum {
ENDPOINT_PEER ENDPOINT_PEER
}; };
bool socket_ip_address (int, ip_address *, int); bool socket_ip_address (int, ip_address *, int);
int socket_family (int sock, int endpoint);
bool retryable_socket_connect_error (int); bool retryable_socket_connect_error (int);

View File

@ -1951,11 +1951,17 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy,
#endif #endif
&host_lookup_failed)) &host_lookup_failed))
{ {
int family = socket_family (pconn.socket, ENDPOINT_PEER);
sock = pconn.socket; sock = pconn.socket;
using_ssl = pconn.ssl; using_ssl = pconn.ssl;
logprintf (LOG_VERBOSE, _("Reusing existing connection to %s:%d.\n"), if (family == AF_INET6)
quotearg_style (escape_quoting_style, pconn.host), logprintf (LOG_VERBOSE, _("Reusing existing connection to [%s]:%d.\n"),
pconn.port); 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)); DEBUGP (("Reusing fd %d.\n", sock));
if (pconn.authorized) if (pconn.authorized)
/* If the connection is already authorized, the "Basic" /* If the connection is already authorized, the "Basic"