http_proxy: deal with non-200 CONNECT response with Hyper

Makes test 94 and 95 work

Closes #7141
This commit is contained in:
Daniel Stenberg 2021-05-27 16:50:24 +02:00
Родитель 23b99fc94c
Коммит d3e0f20fea
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 5CC908FDB71E12C2
1 изменённых файлов: 32 добавлений и 3 удалений

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

@ -243,11 +243,11 @@ static CURLcode CONNECT_host(struct Curl_easy *data,
return CURLE_OK;
}
#ifndef USE_HYPER
static CURLcode CONNECT(struct Curl_easy *data,
int sockindex,
const char *hostname,
int remote_port)
#ifndef USE_HYPER
{
int subversion = 0;
struct SingleRequest *k = &data->req;
@ -702,6 +702,10 @@ static CURLcode CONNECT(struct Curl_easy *data,
}
#else
/* The Hyper version of CONNECT */
static CURLcode CONNECT(struct Curl_easy *data,
int sockindex,
const char *hostname,
int remote_port)
{
struct connectdata *conn = data->conn;
struct hyptransfer *h = &data->hyp;
@ -875,7 +879,6 @@ static CURLcode CONNECT(struct Curl_easy *data,
goto error;
if(!done)
break;
fprintf(stderr, "done\n");
s->tunnel_state = TUNNEL_COMPLETE;
if(h->exec) {
hyper_executor_free(h->exec);
@ -897,6 +900,33 @@ static CURLcode CONNECT(struct Curl_easy *data,
} while(data->req.newurl);
result = CURLE_OK;
if(s->tunnel_state == TUNNEL_COMPLETE) {
data->info.httpproxycode = data->req.httpcode;
if(data->info.httpproxycode/100 != 2) {
if(conn->bits.close && data->req.newurl) {
conn->bits.proxy_connect_closed = TRUE;
infof(data, "Connect me again please\n");
connect_done(data);
}
else {
free(data->req.newurl);
data->req.newurl = NULL;
/* failure, close this connection to avoid re-use */
streamclose(conn, "proxy CONNECT failure");
Curl_closesocket(data, conn, conn->sock[sockindex]);
conn->sock[sockindex] = CURL_SOCKET_BAD;
}
/* to back to init state */
s->tunnel_state = TUNNEL_INIT;
if(!conn->bits.proxy_connect_closed) {
failf(data, "Received HTTP code %d from proxy after CONNECT",
data->req.httpcode);
result = CURLE_RECV_ERROR;
}
}
}
error:
free(host);
free(hostheader);
@ -917,7 +947,6 @@ static CURLcode CONNECT(struct Curl_easy *data,
}
return result;
}
#endif
void Curl_connect_free(struct Curl_easy *data)