mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
more careful re-use of connections when SSL is used over proxies
This commit is contained in:
parent
2f03ef39d1
commit
c16c017f8b
21
lib/url.c
21
lib/url.c
@ -943,9 +943,9 @@ static bool SocketIsDead(int sock)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Given one filled in connection struct, this function should detect if there
|
* Given one filled in connection struct (named needle), this function should
|
||||||
* already is one that have all the significant details exactly the same and
|
* detect if there already is one that have all the significant details
|
||||||
* thus should be used instead.
|
* exactly the same and thus should be used instead.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
ConnectionExists(struct SessionHandle *data,
|
ConnectionExists(struct SessionHandle *data,
|
||||||
@ -964,8 +964,14 @@ ConnectionExists(struct SessionHandle *data,
|
|||||||
if(!check)
|
if(!check)
|
||||||
/* NULL pointer means not filled-in entry */
|
/* NULL pointer means not filled-in entry */
|
||||||
continue;
|
continue;
|
||||||
if(!needle->bits.httpproxy) {
|
if(!needle->bits.httpproxy || needle->protocol&PROT_SSL) {
|
||||||
/* The requested connection does not use a HTTP proxy */
|
/* The requested connection does not use a HTTP proxy or it
|
||||||
|
uses SSL. */
|
||||||
|
|
||||||
|
if(!(needle->protocol&PROT_SSL) && check->bits.httpproxy)
|
||||||
|
/* we don't do SSL but the cached connection has a proxy,
|
||||||
|
then don't match this */
|
||||||
|
continue;
|
||||||
|
|
||||||
if(strequal(needle->protostr, check->protostr) &&
|
if(strequal(needle->protostr, check->protostr) &&
|
||||||
strequal(needle->name, check->name) &&
|
strequal(needle->name, check->name) &&
|
||||||
@ -1556,8 +1562,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
|
|
||||||
conn->port = (data->set.use_port && allow_port)?data->set.use_port:PORT_HTTPS;
|
conn->port = (data->set.use_port && allow_port)?data->set.use_port:PORT_HTTPS;
|
||||||
conn->remote_port = PORT_HTTPS;
|
conn->remote_port = PORT_HTTPS;
|
||||||
conn->protocol |= PROT_HTTP;
|
conn->protocol |= PROT_HTTP|PROT_HTTPS|PROT_SSL;
|
||||||
conn->protocol |= PROT_HTTPS;
|
|
||||||
|
|
||||||
conn->curl_do = Curl_http;
|
conn->curl_do = Curl_http;
|
||||||
conn->curl_done = Curl_http_done;
|
conn->curl_done = Curl_http_done;
|
||||||
@ -1588,7 +1593,7 @@ static CURLcode CreateConnection(struct SessionHandle *data,
|
|||||||
|
|
||||||
if(strequal(conn->protostr, "FTPS")) {
|
if(strequal(conn->protostr, "FTPS")) {
|
||||||
#ifdef USE_SSLEAY
|
#ifdef USE_SSLEAY
|
||||||
conn->protocol |= PROT_FTPS;
|
conn->protocol |= PROT_FTPS|PROT_SSL;
|
||||||
#else
|
#else
|
||||||
failf(data, LIBCURL_NAME
|
failf(data, LIBCURL_NAME
|
||||||
" was built with SSL disabled, ftps: not supported!");
|
" was built with SSL disabled, ftps: not supported!");
|
||||||
|
@ -223,6 +223,7 @@ struct connectdata {
|
|||||||
#define PROT_LDAP (1<<7)
|
#define PROT_LDAP (1<<7)
|
||||||
#define PROT_FILE (1<<8)
|
#define PROT_FILE (1<<8)
|
||||||
#define PROT_FTPS (1<<9)
|
#define PROT_FTPS (1<<9)
|
||||||
|
#define PROT_SSL (1<<10) /* protocol requires SSL */
|
||||||
|
|
||||||
Curl_addrinfo *hostaddr; /* IP-protocol independent host info pointer list */
|
Curl_addrinfo *hostaddr; /* IP-protocol independent host info pointer list */
|
||||||
char *hostent_buf; /* pointer to allocated memory for name info */
|
char *hostent_buf; /* pointer to allocated memory for name info */
|
||||||
|
Loading…
Reference in New Issue
Block a user