Loading lib/url.c +32 −30 Original line number Diff line number Diff line Loading @@ -2084,8 +2084,9 @@ ConnectionExists(struct SessionHandle *data, } } else { /* The requested needle connection is using a proxy, is the checked one using the same? */ if(check->bits.httpproxy && is the checked one using the same host, port and type? */ if(check->bits.proxy && (needle->proxytype == check->proxytype) && strequal(needle->proxy.name, check->proxy.name) && needle->port == check->port) { /* This is the same proxy connection, use it! */ Loading Loading @@ -2240,10 +2241,10 @@ static CURLcode ConnectPlease(struct SessionHandle *data, { CURLcode result; Curl_addrinfo *addr; char *hostname = conn->bits.httpproxy?conn->proxy.name:conn->host.name; char *hostname = conn->bits.proxy?conn->proxy.name:conn->host.name; infof(data, "About to connect() to %s%s port %d (#%d)\n", conn->bits.httpproxy?"proxy ":"", conn->bits.proxy?"proxy ":"", hostname, conn->port, conn->connectindex); /************************************************************* Loading Loading @@ -2287,7 +2288,7 @@ static CURLcode ConnectPlease(struct SessionHandle *data, static void verboseconnect(struct connectdata *conn) { infof(conn->data, "Connected to %s (%s) port %d (#%d)\n", conn->bits.httpproxy ? conn->proxy.dispname : conn->host.dispname, conn->bits.proxy ? conn->proxy.dispname : conn->host.dispname, conn->ip_addr_str, conn->port, conn->connectindex); } Loading Loading @@ -2766,9 +2767,10 @@ static CURLcode CreateConnection(struct SessionHandle *data, conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */ conn->connectindex = -1; /* no index */ conn->bits.httpproxy = (bool)(data->set.proxy /* http proxy or not */ && *data->set.proxy && (data->set.proxytype == CURLPROXY_HTTP)); conn->proxytype = data->set.proxytype; /* type */ conn->bits.proxy = (bool)(data->set.proxy && *data->set.proxy); conn->bits.httpproxy = (bool)(conn->bits.proxy && (conn->proxytype == CURLPROXY_HTTP)); proxy = data->set.proxy; /* if global proxy is set, this is it */ /* Default protocol-independent behavior doesn't support persistent Loading Loading @@ -2867,9 +2869,10 @@ static CURLcode CreateConnection(struct SessionHandle *data, #ifndef CURL_DISABLE_HTTP /************************************************************* * Detect what (if any) proxy to use * Detect what (if any) proxy to use. Remember that this selects a host * name and is not limited to HTTP proxies only. *************************************************************/ if(!conn->bits.httpproxy) { if(!proxy) { /* If proxy was not specified, we check for default proxy environment * variables, to enable i.e Lynx compliance: * Loading Loading @@ -2964,12 +2967,15 @@ static CURLcode CreateConnection(struct SessionHandle *data, if(proxy && *proxy) { long bits = conn->protocol & (PROT_HTTPS|PROT_SSL|PROT_MISSING); /* force this to become HTTP */ conn->protocol = PROT_HTTP | bits; proxy_alloc=TRUE; /* this needs to be freed later */ if(conn->proxytype == CURLPROXY_HTTP) { /* force this connection's protocol to become HTTP */ conn->protocol = PROT_HTTP | bits; conn->bits.httpproxy = TRUE; } } } /* if (!nope) - it wasn't specified non-proxy */ } /* NO_PROXY wasn't specified or '*' */ if(no_proxy) Loading Loading @@ -3081,7 +3087,7 @@ static CURLcode CreateConnection(struct SessionHandle *data, conn->remote_port = (unsigned short)port; conn->protocol |= PROT_FTP; if(proxy && *proxy && !data->set.tunnel_thru_httpproxy) { if(conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy) { /* Unless we have asked to tunnel ftp operations through the proxy, we switch and use HTTP operations only */ #ifndef CURL_DISABLE_HTTP Loading Loading @@ -3686,17 +3692,16 @@ else { } /* host can change, when doing keepalive with a proxy ! */ if (conn->bits.httpproxy) { if (conn->bits.proxy) { free(conn->host.rawalloc); conn->host=old_conn->host; } else free(old_conn->host.rawalloc); /* free the newly allocated name buffer */ /* get the newly set value, not the old one */ conn->bits.no_body = old_conn->bits.no_body; if (!conn->bits.httpproxy) free(old_conn->host.rawalloc); /* free the newly allocated name buffer */ /* re-use init */ conn->bits.reuse = TRUE; /* yes, we're re-using here */ conn->bits.chunk = FALSE; /* always assume not chunked unless told Loading Loading @@ -3743,7 +3748,7 @@ else { infof(data, "Re-using existing connection! (#%ld) with host %s\n", conn->connectindex, conn->bits.httpproxy?conn->proxy.dispname:conn->host.dispname); proxy?conn->proxy.dispname:conn->host.dispname); } else { /* Loading Loading @@ -3842,7 +3847,7 @@ else { hostaddr = NULL; /* we'll need to clear conn->dns_entry later in Curl_disconnect() */ if (conn->bits.httpproxy) if (conn->bits.proxy) fix_hostname(data, conn, &conn->host); } else { Loading Loading @@ -3961,18 +3966,15 @@ static CURLcode SetupConnection(struct connectdata *conn, *protocol_done = FALSE; /* default to not done */ /************************************************************* * Send user-agent to HTTP proxies even if the target protocol * isn't HTTP. * Set user-agent for HTTP *************************************************************/ if((conn->protocol&PROT_HTTP) || conn->bits.httpproxy) { if(data->set.useragent) { if((conn->protocol&PROT_HTTP) && data->set.useragent) { Curl_safefree(conn->allocptr.uagent); conn->allocptr.uagent = aprintf("User-Agent: %s\r\n", data->set.useragent); if(!conn->allocptr.uagent) return CURLE_OUT_OF_MEMORY; } } conn->headerbytecount = 0; Loading lib/urldata.h +2 −0 Original line number Diff line number Diff line Loading @@ -432,6 +432,7 @@ struct ConnectBits { bool close; /* if set, we close the connection after this request */ bool reuse; /* if set, this is a re-used connection */ bool chunk; /* if set, this is a chunked transfer-encoding */ bool proxy; /* if set, this transfer is done through a proxy - any type */ bool httpproxy; /* if set, this transfer is done through a http proxy */ bool user_passwd; /* do we use user+password for this connection? */ bool proxy_user_passwd; /* user+password for the proxy? */ Loading Loading @@ -748,6 +749,7 @@ struct connectdata { char *proxyuser; /* proxy user name string, allocated */ char *proxypasswd; /* proxy password string, allocated */ curl_proxytype proxytype; /* what kind of proxy that is in use */ struct timeval now; /* "current" time */ struct timeval created; /* creation time */ Loading Loading
lib/url.c +32 −30 Original line number Diff line number Diff line Loading @@ -2084,8 +2084,9 @@ ConnectionExists(struct SessionHandle *data, } } else { /* The requested needle connection is using a proxy, is the checked one using the same? */ if(check->bits.httpproxy && is the checked one using the same host, port and type? */ if(check->bits.proxy && (needle->proxytype == check->proxytype) && strequal(needle->proxy.name, check->proxy.name) && needle->port == check->port) { /* This is the same proxy connection, use it! */ Loading Loading @@ -2240,10 +2241,10 @@ static CURLcode ConnectPlease(struct SessionHandle *data, { CURLcode result; Curl_addrinfo *addr; char *hostname = conn->bits.httpproxy?conn->proxy.name:conn->host.name; char *hostname = conn->bits.proxy?conn->proxy.name:conn->host.name; infof(data, "About to connect() to %s%s port %d (#%d)\n", conn->bits.httpproxy?"proxy ":"", conn->bits.proxy?"proxy ":"", hostname, conn->port, conn->connectindex); /************************************************************* Loading Loading @@ -2287,7 +2288,7 @@ static CURLcode ConnectPlease(struct SessionHandle *data, static void verboseconnect(struct connectdata *conn) { infof(conn->data, "Connected to %s (%s) port %d (#%d)\n", conn->bits.httpproxy ? conn->proxy.dispname : conn->host.dispname, conn->bits.proxy ? conn->proxy.dispname : conn->host.dispname, conn->ip_addr_str, conn->port, conn->connectindex); } Loading Loading @@ -2766,9 +2767,10 @@ static CURLcode CreateConnection(struct SessionHandle *data, conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */ conn->connectindex = -1; /* no index */ conn->bits.httpproxy = (bool)(data->set.proxy /* http proxy or not */ && *data->set.proxy && (data->set.proxytype == CURLPROXY_HTTP)); conn->proxytype = data->set.proxytype; /* type */ conn->bits.proxy = (bool)(data->set.proxy && *data->set.proxy); conn->bits.httpproxy = (bool)(conn->bits.proxy && (conn->proxytype == CURLPROXY_HTTP)); proxy = data->set.proxy; /* if global proxy is set, this is it */ /* Default protocol-independent behavior doesn't support persistent Loading Loading @@ -2867,9 +2869,10 @@ static CURLcode CreateConnection(struct SessionHandle *data, #ifndef CURL_DISABLE_HTTP /************************************************************* * Detect what (if any) proxy to use * Detect what (if any) proxy to use. Remember that this selects a host * name and is not limited to HTTP proxies only. *************************************************************/ if(!conn->bits.httpproxy) { if(!proxy) { /* If proxy was not specified, we check for default proxy environment * variables, to enable i.e Lynx compliance: * Loading Loading @@ -2964,12 +2967,15 @@ static CURLcode CreateConnection(struct SessionHandle *data, if(proxy && *proxy) { long bits = conn->protocol & (PROT_HTTPS|PROT_SSL|PROT_MISSING); /* force this to become HTTP */ conn->protocol = PROT_HTTP | bits; proxy_alloc=TRUE; /* this needs to be freed later */ if(conn->proxytype == CURLPROXY_HTTP) { /* force this connection's protocol to become HTTP */ conn->protocol = PROT_HTTP | bits; conn->bits.httpproxy = TRUE; } } } /* if (!nope) - it wasn't specified non-proxy */ } /* NO_PROXY wasn't specified or '*' */ if(no_proxy) Loading Loading @@ -3081,7 +3087,7 @@ static CURLcode CreateConnection(struct SessionHandle *data, conn->remote_port = (unsigned short)port; conn->protocol |= PROT_FTP; if(proxy && *proxy && !data->set.tunnel_thru_httpproxy) { if(conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy) { /* Unless we have asked to tunnel ftp operations through the proxy, we switch and use HTTP operations only */ #ifndef CURL_DISABLE_HTTP Loading Loading @@ -3686,17 +3692,16 @@ else { } /* host can change, when doing keepalive with a proxy ! */ if (conn->bits.httpproxy) { if (conn->bits.proxy) { free(conn->host.rawalloc); conn->host=old_conn->host; } else free(old_conn->host.rawalloc); /* free the newly allocated name buffer */ /* get the newly set value, not the old one */ conn->bits.no_body = old_conn->bits.no_body; if (!conn->bits.httpproxy) free(old_conn->host.rawalloc); /* free the newly allocated name buffer */ /* re-use init */ conn->bits.reuse = TRUE; /* yes, we're re-using here */ conn->bits.chunk = FALSE; /* always assume not chunked unless told Loading Loading @@ -3743,7 +3748,7 @@ else { infof(data, "Re-using existing connection! (#%ld) with host %s\n", conn->connectindex, conn->bits.httpproxy?conn->proxy.dispname:conn->host.dispname); proxy?conn->proxy.dispname:conn->host.dispname); } else { /* Loading Loading @@ -3842,7 +3847,7 @@ else { hostaddr = NULL; /* we'll need to clear conn->dns_entry later in Curl_disconnect() */ if (conn->bits.httpproxy) if (conn->bits.proxy) fix_hostname(data, conn, &conn->host); } else { Loading Loading @@ -3961,18 +3966,15 @@ static CURLcode SetupConnection(struct connectdata *conn, *protocol_done = FALSE; /* default to not done */ /************************************************************* * Send user-agent to HTTP proxies even if the target protocol * isn't HTTP. * Set user-agent for HTTP *************************************************************/ if((conn->protocol&PROT_HTTP) || conn->bits.httpproxy) { if(data->set.useragent) { if((conn->protocol&PROT_HTTP) && data->set.useragent) { Curl_safefree(conn->allocptr.uagent); conn->allocptr.uagent = aprintf("User-Agent: %s\r\n", data->set.useragent); if(!conn->allocptr.uagent) return CURLE_OUT_OF_MEMORY; } } conn->headerbytecount = 0; Loading
lib/urldata.h +2 −0 Original line number Diff line number Diff line Loading @@ -432,6 +432,7 @@ struct ConnectBits { bool close; /* if set, we close the connection after this request */ bool reuse; /* if set, this is a re-used connection */ bool chunk; /* if set, this is a chunked transfer-encoding */ bool proxy; /* if set, this transfer is done through a proxy - any type */ bool httpproxy; /* if set, this transfer is done through a http proxy */ bool user_passwd; /* do we use user+password for this connection? */ bool proxy_user_passwd; /* user+password for the proxy? */ Loading Loading @@ -748,6 +749,7 @@ struct connectdata { char *proxyuser; /* proxy user name string, allocated */ char *proxypasswd; /* proxy password string, allocated */ curl_proxytype proxytype; /* what kind of proxy that is in use */ struct timeval now; /* "current" time */ struct timeval created; /* creation time */ Loading