[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnurl] 28/151: ngtcp2: increase QUIC window size when data is consumed
From: |
gnunet |
Subject: |
[gnurl] 28/151: ngtcp2: increase QUIC window size when data is consumed |
Date: |
Fri, 20 Dec 2019 14:25:37 +0100 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to branch master
in repository gnurl.
commit 7627a2dd9d4b7417672fdec3dc6e7f8d3de379de
Author: Daniel Stenberg <address@hidden>
AuthorDate: Tue Nov 12 11:39:41 2019 +0100
ngtcp2: increase QUIC window size when data is consumed
Assisted-by: Javier Blazquez
Ref #4525 (partial fix)
Closes #4600
---
lib/http.h | 1 +
lib/vquic/ngtcp2.c | 38 ++++++++++++++++++++++++--------------
2 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/lib/http.h b/lib/http.h
index a3a275702..87e979ee2 100644
--- a/lib/http.h
+++ b/lib/http.h
@@ -198,6 +198,7 @@ struct HTTP {
bool upload_done;
#endif
#ifdef USE_NGHTTP3
+ size_t unacked_window;
struct h3out *h3out; /* per-stream buffers for upload */
#endif
};
diff --git a/lib/vquic/ngtcp2.c b/lib/vquic/ngtcp2.c
index c0f9b16e3..86151b8a2 100644
--- a/lib/vquic/ngtcp2.c
+++ b/lib/vquic/ngtcp2.c
@@ -336,6 +336,16 @@ static int cb_handshake_completed(ngtcp2_conn *tconn, void
*user_data)
return 0;
}
+static void extend_stream_window(ngtcp2_conn *tconn,
+ struct HTTP *stream)
+{
+ size_t thismuch = stream->unacked_window;
+ ngtcp2_conn_extend_max_stream_offset(tconn, stream->stream3_id, thismuch);
+ ngtcp2_conn_extend_max_offset(tconn, thismuch);
+ stream->unacked_window = 0;
+}
+
+
static int cb_recv_stream_data(ngtcp2_conn *tconn, int64_t stream_id,
int fin, uint64_t offset,
const uint8_t *buf, size_t buflen,
@@ -346,9 +356,6 @@ static int cb_recv_stream_data(ngtcp2_conn *tconn, int64_t
stream_id,
(void)offset;
(void)stream_user_data;
- infof(qs->conn->data, "Received %ld bytes data on stream %u\n",
- buflen, stream_id);
-
nconsumed =
nghttp3_conn_read_stream(qs->h3conn, stream_id, buf, buflen, fin);
if(nconsumed < 0) {
@@ -357,6 +364,9 @@ static int cb_recv_stream_data(ngtcp2_conn *tconn, int64_t
stream_id,
return NGTCP2_ERR_CALLBACK_FAILURE;
}
+ /* number of bytes inside buflen which consists of framing overhead
+ * including QPACK HEADERS. In other words, it does not consume payload of
+ * DATA frame. */
ngtcp2_conn_extend_max_stream_offset(tconn, stream_id, nconsumed);
ngtcp2_conn_extend_max_offset(tconn, nconsumed);
@@ -711,17 +721,19 @@ static int cb_h3_recv_data(nghttp3_conn *conn, int64_t
stream_id,
const uint8_t *buf, size_t buflen,
void *user_data, void *stream_user_data)
{
- struct quicsocket *qs = user_data;
size_t ncopy;
struct Curl_easy *data = stream_user_data;
struct HTTP *stream = data->req.protop;
(void)conn;
- H3BUGF(infof(data, "cb_h3_recv_data CALLED with %d bytes\n", buflen));
/* TODO: this needs to be handled properly */
- DEBUGASSERT(buflen <= stream->len);
+ if(buflen > stream->len) {
+ fprintf(stderr, "!! got %zd bytes, buffer has room for %zd bytes\n",
+ buflen, stream->len);
+ DEBUGASSERT(0);
+ }
- ncopy = CURLMIN(stream->len, buflen);
+ ncopy = buflen;
memcpy(stream->mem, buf, ncopy);
stream->len -= ncopy;
stream->memlen += ncopy;
@@ -736,10 +748,9 @@ static int cb_h3_recv_data(nghttp3_conn *conn, int64_t
stream_id,
}
#endif
stream->mem += ncopy;
-
- ngtcp2_conn_extend_max_stream_offset(qs->qconn, stream_id, buflen);
- ngtcp2_conn_extend_max_offset(qs->qconn, buflen);
-
+ stream->unacked_window += ncopy;
+ (void)stream_id;
+ (void)user_data;
return 0;
}
@@ -750,10 +761,10 @@ static int cb_h3_deferred_consume(nghttp3_conn *conn,
int64_t stream_id,
struct quicsocket *qs = user_data;
(void)conn;
(void)stream_user_data;
+ (void)stream_id;
ngtcp2_conn_extend_max_stream_offset(qs->qconn, stream_id, consumed);
ngtcp2_conn_extend_max_offset(qs->qconn, consumed);
-
return 0;
}
@@ -969,8 +980,7 @@ static ssize_t ngh3_stream_recv(struct connectdata *conn,
stream->memlen = 0;
stream->mem = buf;
stream->len = buffersize;
- H3BUGF(infof(conn->data, "!! ngh3_stream_recv returns %zd bytes at %p\n",
- memlen, buf));
+ extend_stream_window(qs->qconn, stream);
return memlen;
}
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [gnurl] 23/151: HISTORY: added cmake, HTTP/3 and parallel downloads with curl, (continued)
- [gnurl] 23/151: HISTORY: added cmake, HTTP/3 and parallel downloads with curl, gnunet, 2019/12/20
- [gnurl] 09/151: copyrights: fix copyright year range, gnunet, 2019/12/20
- [gnurl] 26/151: examples: add multi-poll.c, gnunet, 2019/12/20
- [gnurl] 14/151: TODO: curl_multi_unblock, gnunet, 2019/12/20
- [gnurl] 17/151: pause: avoid updating socket if done was already called, gnunet, 2019/12/20
- [gnurl] 25/151: multi_poll: avoid busy-loop when called without easy handles attached, gnunet, 2019/12/20
- [gnurl] 27/151: config-win32: cpu-machine-OS for Windows on ARM, gnunet, 2019/12/20
- [gnurl] 33/151: ngtcp2: handle key updates as ngtcp2 master branch tells us, gnunet, 2019/12/20
- [gnurl] 32/151: multi: Fix curl_multi_poll wait when extra_fds && !extra_nfds, gnunet, 2019/12/20
- [gnurl] 29/151: doh: improced both encoding and decoding, gnunet, 2019/12/20
- [gnurl] 28/151: ngtcp2: increase QUIC window size when data is consumed,
gnunet <=
- [gnurl] 34/151: ngtcp2: free used resources on disconnect, gnunet, 2019/12/20
- [gnurl] 45/151: openssl: Revert to less sensitivity for SYSCALL errors, gnunet, 2019/12/20
- [gnurl] 44/151: openssl: improve error message for SYSCALL during connect, gnunet, 2019/12/20
- [gnurl] 40/151: curl: add --parallel-immediate, gnunet, 2019/12/20
- [gnurl] 37/151: RELEASE-NOTES: synced, gnunet, 2019/12/20
- [gnurl] 42/151: include: make CURLE_HTTP3 use a new error code, gnunet, 2019/12/20
- [gnurl] 39/151: docs: fix typos, gnunet, 2019/12/20
- [gnurl] 30/151: INSTALL.md: provide Android build instructions, gnunet, 2019/12/20
- [gnurl] 43/151: test1175: verify symbols-in-versions and libcurl-errors.3 in sync, gnunet, 2019/12/20
- [gnurl] 41/151: bump: next release will be 7.68.0, gnunet, 2019/12/20