http_proxy: multiple CONNECT with hyper done better

Enabled test 206

Closes #7888
This commit is contained in:
Daniel Stenberg 2021-10-21 16:42:42 +02:00
Родитель 5276ec941f
Коммит 823d3ab855
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 5CC908FDB71E12C2
2 изменённых файлов: 17 добавлений и 3 удалений

Просмотреть файл

@ -284,8 +284,7 @@ static CURLcode CONNECT(struct Curl_easy *data,
/* This only happens if we've looped here due to authentication
reasons, and we don't really use the newly cloned URL here
then. Just free() it. */
free(data->req.newurl);
data->req.newurl = NULL;
Curl_safefree(data->req.newurl);
/* initialize send-buffer */
Curl_dyn_init(req, DYN_HTTP_REQUEST);
@ -805,6 +804,14 @@ static CURLcode CONNECT(struct Curl_easy *data,
goto error;
}
infof(data, "Establish HTTP proxy tunnel to %s:%d",
hostname, remote_port);
/* This only happens if we've looped here due to authentication
reasons, and we don't really use the newly cloned URL here
then. Just free() it. */
Curl_safefree(data->req.newurl);
result = CONNECT_host(data, conn, hostname, remote_port,
&hostheader, &host);
if(result)
@ -945,6 +952,14 @@ static CURLcode CONNECT(struct Curl_easy *data,
default:
break;
}
/* If we are supposed to continue and request a new URL, which basically
* means the HTTP authentication is still going on so if the tunnel
* is complete we start over in INIT state */
if(data->req.newurl && (TUNNEL_COMPLETE == s->tunnel_state)) {
infof(data, "CONNECT request done, loop to make another");
connect_init(data, TRUE); /* reinit */
}
} while(data->req.newurl);
result = CURLE_OK;

Просмотреть файл

@ -40,7 +40,6 @@
# hyper support remains EXPERIMENTAL as long as there's a test number
# listed below
%if hyper
206
207
209
213