aboutsummaryrefslogtreecommitdiff
path: root/lib/http_proxy.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2012-02-24 23:33:14 +0100
committerDaniel Stenberg <daniel@haxx.se>2012-02-24 23:33:14 +0100
commit79b6f4a2d37a17795e61b5ae9579f11bed9ad3cc (patch)
treeb17677476ee9524fb176214726b727080ea1ec81 /lib/http_proxy.c
parent5430007222e0325a1c5e0359ecde43886cef61af (diff)
CONNECT: fix ipv6 address in the Request-Line
Commit 466150bc64d fixed the Host: header with CONNECT, but I then forgot the preceeding request-line. Now this too uses [brackets] properly if a ipv6 numerical address was given. Bug: http://curl.haxx.se/bug/view.cgi?id=3493129 Reported by: "Blacat"
Diffstat (limited to 'lib/http_proxy.c')
-rw-r--r--lib/http_proxy.c39
1 files changed, 22 insertions, 17 deletions
diff --git a/lib/http_proxy.c b/lib/http_proxy.c
index 1c2aa59c8..b12d37011 100644
--- a/lib/http_proxy.c
+++ b/lib/http_proxy.c
@@ -124,11 +124,15 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
const char *useragent="";
const char *http = (conn->proxytype == CURLPROXY_HTTP_1_0) ?
"1.0" : "1.1";
+ char *hostheader= /* host:port with IPv6 support */
+ aprintf("%s%s%s:%hu", conn->bits.ipv6_ip?"[":"",
+ hostname, conn->bits.ipv6_ip?"]":"",
+ remote_port);
+ if(!hostheader)
+ return CURLE_OUT_OF_MEMORY;
if(!Curl_checkheaders(data, "Host:")) {
- host = aprintf("Host: %s%s%s:%hu\r\n", conn->bits.ipv6_ip?"[":"",
- hostname, conn->bits.ipv6_ip?"]":"",
- remote_port);
+ host = aprintf("Host: %s\r\n", hostheader);
if(!host) {
free(req_buffer);
return CURLE_OUT_OF_MEMORY;
@@ -141,24 +145,24 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
data->set.str[STRING_USERAGENT])
useragent = conn->allocptr.uagent;
- /* Send the connect request to the proxy */
- /* BLOCKING */
result =
Curl_add_bufferf(req_buffer,
- "CONNECT %s:%hu HTTP/%s\r\n"
- "%s" /* Host: */
- "%s" /* Proxy-Authorization */
- "%s" /* User-Agent */
- "%s", /* Proxy-Connection */
- hostname, remote_port, http,
- host,
- conn->allocptr.proxyuserpwd?
- conn->allocptr.proxyuserpwd:"",
- useragent,
- proxyconn);
+ "CONNECT %s HTTP/%s\r\n"
+ "%s" /* Host: */
+ "%s" /* Proxy-Authorization */
+ "%s" /* User-Agent */
+ "%s", /* Proxy-Connection */
+ hostheader,
+ http,
+ host,
+ conn->allocptr.proxyuserpwd?
+ conn->allocptr.proxyuserpwd:"",
+ useragent,
+ proxyconn);
if(host && *host)
free(host);
+ free(hostheader);
if(CURLE_OK == result)
result = Curl_add_custom_headers(conn, req_buffer);
@@ -168,7 +172,8 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
result = Curl_add_bufferf(req_buffer, "\r\n");
if(CURLE_OK == result) {
- /* Now send off the request */
+ /* Send the connect request to the proxy */
+ /* BLOCKING */
result =
Curl_add_buffer_send(req_buffer, conn,
&data->info.request_size, 0, sockindex);