summaryrefslogtreecommitdiff
path: root/lib/http2.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2016-09-05 08:51:06 +0200
committerDaniel Stenberg <daniel@haxx.se>2016-09-05 13:55:24 +0200
commit03bb48159831682fb39a92a6b62b7c4551ef63c8 (patch)
tree1e0039a06dbb86f043489ef7b9d4a65ee5e6d6eb /lib/http2.c
parentcd5c03aa6da7d29590dde3b9e048c838e69e5027 (diff)
downloadgnurl-03bb48159831682fb39a92a6b62b7c4551ef63c8.tar.gz
gnurl-03bb48159831682fb39a92a6b62b7c4551ef63c8.tar.bz2
gnurl-03bb48159831682fb39a92a6b62b7c4551ef63c8.zip
http2: skip the content-length parsing, detect unknown size
Diffstat (limited to 'lib/http2.c')
-rw-r--r--lib/http2.c28
1 files changed, 6 insertions, 22 deletions
diff --git a/lib/http2.c b/lib/http2.c
index 55eccaabf..17915d45a 100644
--- a/lib/http2.c
+++ b/lib/http2.c
@@ -1735,28 +1735,6 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
failf(conn->data, "Failed sending HTTP request: Header overflow");
goto fail;
}
- /* Inspect Content-Length header field and retrieve the request
- entity length so that we can set END_STREAM to the last DATA
- frame. */
- if(nva[i].namelen == 14 &&
- Curl_raw_nequal("content-length", (char*)nva[i].name, 14)) {
- size_t j;
- stream->upload_left = 0;
- if(!nva[i].valuelen)
- goto fail;
- for(j = 0; j < nva[i].valuelen; ++j) {
- if(nva[i].value[j] < '0' || nva[i].value[j] > '9')
- goto fail;
- if(stream->upload_left >= CURL_OFF_T_MAX / 10)
- goto fail;
- stream->upload_left *= 10;
- stream->upload_left += nva[i].value[j] - '0';
- }
- DEBUGF(infof(conn->data,
- "request content-length=%"
- CURL_FORMAT_CURL_OFF_T
- "\n", stream->upload_left));
- }
++i;
}
}
@@ -1799,6 +1777,12 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
case HTTPREQ_POST:
case HTTPREQ_POST_FORM:
case HTTPREQ_PUT:
+ if(conn->data->state.infilesize != -1)
+ stream->upload_left = conn->data->state.infilesize;
+ else
+ /* data sending without specifying the data amount up front */
+ stream->upload_left = -1; /* unknown, but not zero */
+
data_prd.read_callback = data_source_read_callback;
data_prd.source.ptr = NULL;
stream_id = nghttp2_submit_request(h2, &pri_spec, nva, nheader,