ngtcp2: fix handling of large requests

- requests >64K are send in parts to the filter
- fix parsing of the request to assemble it correctly
  from several sends
- open a QUIC stream only when the complete request has
  been collected

Closes #11815
This commit is contained in:
Stefan Eissing 2023-09-07 14:51:44 +02:00 committed by Daniel Stenberg
parent c849062677
commit 33dac9dfac
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2

View file

@ -1655,13 +1655,6 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf,
stream = H3_STREAM_CTX(data);
DEBUGASSERT(stream);
rc = ngtcp2_conn_open_bidi_stream(ctx->qconn, &stream->id, NULL);
if(rc) {
failf(data, "can get bidi streams");
*err = CURLE_SEND_ERROR;
goto out;
}
nwritten = Curl_h1_req_parse_read(&stream->h1, buf, len, NULL, 0, err);
if(nwritten < 0)
goto out;
@ -1696,6 +1689,13 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf,
nva[i].flags = NGHTTP3_NV_FLAG_NONE;
}
rc = ngtcp2_conn_open_bidi_stream(ctx->qconn, &stream->id, NULL);
if(rc) {
failf(data, "can get bidi streams");
*err = CURLE_SEND_ERROR;
goto out;
}
switch(data->state.httpreq) {
case HTTPREQ_POST:
case HTTPREQ_POST_FORM: