diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2019-08-24 18:43:31 +0200 |
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2019-08-24 18:44:16 +0200 |
| commit | eb38d2a7b44a14ac727f108c94702112b385ff89 (patch) | |
| tree | 80c3f6a2246c902b4013e5f9e122c1e155d0ce54 | |
| parent | 65fda739ee35c090b2e6d91229287de734f0fbae (diff) | |
| download | curl-bagder/ngtcp2-improved-response.tar.gz | |
ngtcp2: improve h3 response receivingbagder/ngtcp2-improved-response
| -rw-r--r-- | lib/vquic/ngtcp2.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/lib/vquic/ngtcp2.c b/lib/vquic/ngtcp2.c index 1cdbb7d39..bf9d59d10 100644 --- a/lib/vquic/ngtcp2.c +++ b/lib/vquic/ngtcp2.c @@ -1267,6 +1267,16 @@ static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream_id, memcpy(stream->mem, buf, ncopy); stream->len -= ncopy; stream->memlen += ncopy; +#if 0 /* extra debugging of incoming h3 data */ + fprintf(stderr, "!! Copies %zd bytes to %p (total %zd)\n", + ncopy, stream->mem, stream->memlen); + { + size_t i; + for(i = 0; i < ncopy; i++) { + fprintf(stderr, "!! data[%d]: %02x '%c'\n", i, buf[i], buf[i]); + } + } +#endif stream->mem += ncopy; ngtcp2_conn_extend_max_stream_offset(qs->qconn, stream_id, buflen); @@ -1483,11 +1493,13 @@ static ssize_t ngh3_stream_recv(struct connectdata *conn, fprintf(stderr, "ngh3_stream_recv CALLED (easy %p, socket %d)\n", conn->data, sockfd); - /* remember where to store incoming data for this stream and how big the - buffer is */ - stream->mem = buf; - stream->len = buffersize; - stream->memlen = 0; + if(!stream->memlen) { + /* remember where to store incoming data for this stream and how big the + buffer is */ + stream->mem = buf; + stream->len = buffersize; + } + /* else, there's data in the buffer already */ if(ng_process_ingress(conn, sockfd, qs)) { *curlcode = CURLE_RECV_ERROR; @@ -1499,11 +1511,16 @@ static ssize_t ngh3_stream_recv(struct connectdata *conn, } if(stream->memlen) { + ssize_t memlen = stream->memlen; /* data arrived */ *curlcode = CURLE_OK; - infof(conn->data, "ngh3_stream_recv returns %zd bytes\n", - stream->memlen); - return stream->memlen; + /* reset to allow more data to come */ + stream->memlen = 0; + stream->mem = buf; + stream->len = buffersize; + H3BUGF(infof(conn->data, "!! ngh3_stream_recv returns %zd bytes at %p\n", + memlen, buf)); + return memlen; } if(stream->closed) { @@ -1588,7 +1605,7 @@ static int cb_h3_readfunction(nghttp3_conn *conn, int64_t stream_id, } if(stream->upload_done && !stream->upload_len && (stream->upload_left <= 0)) { - fprintf(stderr, "!!!!!!!!! cb_h3_readfunction sets EOF\n"); + H3BUGF(infof(data, "!!!!!!!!! cb_h3_readfunction sets EOF\n")); *pdata = NULL; *pdatalen = 0; *pflags = NGHTTP3_DATA_FLAG_EOF; |
