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

[svn] Don't attempt to talk to two different SSL sites over the same secure

connection.
This commit is contained in:
hniksic 2003-11-13 14:48:03 -08:00
parent 509154dc81
commit 9d907933ad
2 changed files with 28 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2003-11-13 Hrvoje Niksic <hniksic@xemacs.org>
* http.c (persistent_available_p): Don't attempt to talk to two
different SSL sites over the same secure connection.
2003-11-13 Hrvoje Niksic <hniksic@xemacs.org> 2003-11-13 Hrvoje Niksic <hniksic@xemacs.org>
* http.c (gethttp): Ditto. * http.c (gethttp): Ditto.

View File

@ -438,18 +438,32 @@ persistent_available_p (const char *host, int port, int ssl,
still hope -- read below. */ still hope -- read below. */
if (0 != strcasecmp (host, pconn.host)) if (0 != strcasecmp (host, pconn.host))
{ {
/* This is somewhat evil, but works in practice: if the address /* If pconn.socket is already talking to HOST, we needn't
that pconn.socket is connected to is one of the IP addresses reconnect. This happens often when both sites are virtual
HOST resolves to, we don't need to reconnect. #### Is it hosts distinguished only by name and served by the same
correct to do this by default? */ network interface, and hence the same web server (possibly
set up by the ISP and serving many different web sites).
This admittedly non-standard optimization does not contradict
HTTP and works well with popular server software. */
int found; int found;
ip_address ip; ip_address ip;
struct address_list *al; struct address_list *al;
if (ssl)
/* Don't try to talk to two different SSL sites over the same
secure connection! (Besides, it's not clear if name-based
virtual hosting is even possible with SSL.) */
return 0;
/* If pconn.socket's peer is one of the IP addresses HOST
resolves to, pconn.socket is for all intents and purposes
already talking to HOST. */
if (!socket_ip_address (pconn.socket, &ip, 0)) if (!socket_ip_address (pconn.socket, &ip, 0))
{ {
/* Can't get the peer's address -- something must be wrong /* Can't get the peer's address -- something must be very
with the connection. */ wrong with the connection. */
invalidate_persistent (); invalidate_persistent ();
return 0; return 0;
} }
@ -466,8 +480,9 @@ persistent_available_p (const char *host, int port, int ssl,
if (!found) if (!found)
return 0; return 0;
/* HOST resolves to an address pconn.sock is connected to -- no /* The persistent connection's peer address was found among the
need to reconnect. */ addresses HOST resolved to; therefore, pconn.sock is in fact
already talking to HOST -- no need to reconnect. */
} }
/* Finally, check whether the connection is still open. This is /* Finally, check whether the connection is still open. This is