summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2021-08-23 14:20:08 +0200
committerDaniel Stenberg <daniel@haxx.se>2021-08-23 14:20:08 +0200
commitbb56bc5c0b9c9efcd9bc0caabd2e0ac94ca97473 (patch)
tree93d1f408e9ba989d8ec6ccffd90852ce82635701
parent473b893c7e3be0cfd6a050723ccdaea53e88cafb (diff)
downloadcurl-bagder/hyper-downgrade-1_0.tar.gz
c-hyper: handle HTTP/1.1 => HTTP/1.0 downgrade on reused connectionbagder/hyper-downgrade-1_0
Enable test 1074
-rw-r--r--lib/c-hyper.c5
-rw-r--r--lib/http.c10
-rw-r--r--lib/http.h2
-rw-r--r--tests/data/DISABLED1
4 files changed, 11 insertions, 7 deletions
diff --git a/lib/c-hyper.c b/lib/c-hyper.c
index 5cb04bb3e..d7f6c9033 100644
--- a/lib/c-hyper.c
+++ b/lib/c-hyper.c
@@ -259,6 +259,9 @@ static CURLcode status_line(struct Curl_easy *data,
conn->httpversion =
http_version == HYPER_HTTP_VERSION_1_1 ? 11 :
(http_version == HYPER_HTTP_VERSION_2 ? 20 : 10);
+ if(http_version == HYPER_HTTP_VERSION_1_0)
+ data->state.httpwant = CURL_HTTP_VERSION_1_0;
+
data->req.httpcode = http_status;
result = Curl_http_statusline(data, conn);
@@ -892,7 +895,7 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
goto error;
}
- if(data->state.httpwant == CURL_HTTP_VERSION_1_0) {
+ if(!Curl_use_http_1_1plus(data, conn)) {
if(HYPERE_OK != hyper_request_set_version(req,
HYPER_HTTP_VERSION_1_0)) {
failf(data, "error setting HTTP version");
diff --git a/lib/http.c b/lib/http.c
index 54362362a..d0026c4da 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -1669,8 +1669,8 @@ CURLcode Curl_http_done(struct Curl_easy *data,
* - if any server previously contacted to handle this request only supports
* 1.0.
*/
-static bool use_http_1_1plus(const struct Curl_easy *data,
- const struct connectdata *conn)
+bool Curl_use_http_1_1plus(const struct Curl_easy *data,
+ const struct connectdata *conn)
{
if((data->state.httpversion == 10) || (conn->httpversion == 10))
return FALSE;
@@ -1696,7 +1696,7 @@ static const char *get_http_string(const struct Curl_easy *data,
return "2";
#endif
- if(use_http_1_1plus(data, conn))
+ if(Curl_use_http_1_1plus(data, conn))
return "1.1";
return "1.0";
@@ -1711,7 +1711,7 @@ static CURLcode expect100(struct Curl_easy *data,
CURLcode result = CURLE_OK;
data->state.expect100header = FALSE; /* default to false unless it is set
to TRUE below */
- if(!data->state.disableexpect && use_http_1_1plus(data, conn) &&
+ if(!data->state.disableexpect && Curl_use_http_1_1plus(data, conn) &&
(conn->httpversion < 20)) {
/* if not doing HTTP 1.0 or version 2, or disabled explicitly, we add an
Expect: 100-continue to the headers which actually speeds up post
@@ -2348,7 +2348,7 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn,
if(conn->bits.authneg)
/* don't enable chunked during auth neg */
;
- else if(use_http_1_1plus(data, conn)) {
+ else if(Curl_use_http_1_1plus(data, conn)) {
if(conn->httpversion < 20)
/* HTTP, upload, unknown file size and not HTTP 1.0 */
data->req.upload_chunky = TRUE;
diff --git a/lib/http.h b/lib/http.h
index bce171550..e4ab466c0 100644
--- a/lib/http.h
+++ b/lib/http.h
@@ -99,6 +99,8 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn,
const char **teep);
CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
struct dynbuf *r, Curl_HttpReq httpreq);
+bool Curl_use_http_1_1plus(const struct Curl_easy *data,
+ const struct connectdata *conn);
#ifndef CURL_DISABLE_COOKIES
CURLcode Curl_http_cookies(struct Curl_easy *data,
struct connectdata *conn,
diff --git a/tests/data/DISABLED b/tests/data/DISABLED
index d5f1b7087..f97ef9cb0 100644
--- a/tests/data/DISABLED
+++ b/tests/data/DISABLED
@@ -71,7 +71,6 @@
1061
1070
1071
-1074
1077
1078
1122