mirror of
https://github.com/curl/curl.git
synced 2026-08-24 15:23:36 +03:00
proxy: chunked response, error code
Add test1715 to check proper handling of chunked transfer encoding in CONNECT responses. Change proxy error code from 56 (RECV_ERROR) for everything to 7 (COULDNT_CONNECT) when the server response could be read successfully, but establishing the connection is not possible (http status code wrong). Adapt several test expectations from 56 to 7. Closes #21084
This commit is contained in:
parent
39036c9021
commit
a186ecf4bf
15 changed files with 84 additions and 29 deletions
|
|
@ -465,17 +465,7 @@ static CURLcode recv_CONNECT_resp(struct Curl_cfilter *cf,
|
|||
|
||||
if(ts->keepon == KEEPON_IGNORE) {
|
||||
/* This means we are currently ignoring a response-body */
|
||||
|
||||
if(ts->cl) {
|
||||
/* A Content-Length based body: count down the counter
|
||||
and make sure to break out of the loop when we are done! */
|
||||
ts->cl--;
|
||||
if(ts->cl <= 0) {
|
||||
ts->keepon = KEEPON_DONE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if(ts->chunked_encoding) {
|
||||
if(ts->chunked_encoding) {
|
||||
/* chunked-encoded body, so we need to do the chunked dance
|
||||
properly to know when the end of the body is reached */
|
||||
size_t consumed = 0;
|
||||
|
|
@ -491,6 +481,15 @@ static CURLcode recv_CONNECT_resp(struct Curl_cfilter *cf,
|
|||
ts->keepon = KEEPON_DONE;
|
||||
}
|
||||
}
|
||||
else if(ts->cl) {
|
||||
/* A Content-Length based body: count down the counter
|
||||
and make sure to break out of the loop when we are done! */
|
||||
ts->cl--;
|
||||
if(ts->cl <= 0) {
|
||||
ts->keepon = KEEPON_DONE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -597,6 +596,8 @@ static CURLcode H1_CONNECT(struct Curl_cfilter *cf,
|
|||
/* read what is there */
|
||||
CURL_TRC_CF(data, cf, "CONNECT receive");
|
||||
result = recv_CONNECT_resp(cf, data, ts, &done);
|
||||
if(result)
|
||||
CURL_TRC_CF(data, cf, "error receiving CONNECT response: %d", result);
|
||||
if(!result)
|
||||
result = Curl_pgrsUpdate(data);
|
||||
/* error or not complete yet. return for more multi-multi */
|
||||
|
|
@ -645,7 +646,7 @@ static CURLcode H1_CONNECT(struct Curl_cfilter *cf,
|
|||
Curl_safefree(data->req.newurl);
|
||||
h1_tunnel_go_state(cf, ts, H1_TUNNEL_FAILED, data);
|
||||
failf(data, "CONNECT tunnel failed, response %d", data->req.httpcode);
|
||||
return CURLE_RECV_ERROR;
|
||||
return CURLE_COULDNT_CONNECT;
|
||||
}
|
||||
/* 2xx response, SUCCESS! */
|
||||
h1_tunnel_go_state(cf, ts, H1_TUNNEL_ESTABLISHED, data);
|
||||
|
|
|
|||
|
|
@ -811,7 +811,7 @@ static CURLcode inspect_response(struct Curl_cfilter *cf,
|
|||
}
|
||||
|
||||
/* Seems to have failed */
|
||||
return CURLE_RECV_ERROR;
|
||||
return CURLE_COULDNT_CONNECT;
|
||||
}
|
||||
|
||||
static CURLcode H2_CONNECT(struct Curl_cfilter *cf,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue