diff options
author | Jay Satiro <raysatiro@yahoo.com> | 2020-03-18 02:51:55 -0400 |
---|---|---|
committer | Jay Satiro <raysatiro@yahoo.com> | 2020-03-18 03:39:27 -0400 |
commit | 347a374c5608c6eba80cab2c0fa560975a3368ff (patch) | |
tree | 265e8d1cd8cdd0569a13b580ac16517bfbd501d8 | |
parent | 0ae463ffd4a648fe5c3cc95c052453f3e390ce31 (diff) |
http2: Fix erroneous debug message that h2 connection closed
Prior to this change in libcurl debug builds http2 stream closure was
erroneously referred to as connection closure.
Before:
* nread <= 0, server closed connection, bailing
After:
* nread == 0, stream closed, bailing
Closes https://github.com/curl/curl/pull/5118
-rw-r--r-- | lib/http2.c | 2 | ||||
-rw-r--r-- | lib/transfer.c | 20 |
2 files changed, 14 insertions, 8 deletions
diff --git a/lib/http2.c b/lib/http2.c index 41d8db685..93dfbdb7d 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -1727,8 +1727,6 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex, return retlen; } - /* If this stream is closed, return 0 to signal the http routine to close - the connection */ if(stream->closed) return 0; *err = CURLE_AGAIN; diff --git a/lib/transfer.c b/lib/transfer.c index d02baa4c3..72168336a 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -568,17 +568,20 @@ static CURLcode readwrite_data(struct Curl_easy *data, bool is_empty_data = FALSE; size_t buffersize = data->set.buffer_size; size_t bytestoread = buffersize; +#ifdef USE_NGHTTP2 + bool is_http2 = ((conn->handler->protocol & PROTO_FAMILY_HTTP) && + (conn->httpversion == 20)); +#endif if( -#if defined(USE_NGHTTP2) +#ifdef USE_NGHTTP2 /* For HTTP/2, read data without caring about the content length. This is safe because body in HTTP/2 is always segmented thanks to its framing layer. Meanwhile, we have to call Curl_read to ensure that http2_handle_stream_close is called when we read all incoming bytes for a particular stream. */ - !((conn->handler->protocol & PROTO_FAMILY_HTTP) && - conn->httpversion == 20) && + !is_http2 && #endif k->size != -1 && !k->header) { /* make sure we don't read too much */ @@ -621,9 +624,14 @@ static CURLcode readwrite_data(struct Curl_easy *data, k->buf[nread] = 0; } else { - /* if we receive 0 or less here, the server closed the connection - and we bail out from this! */ - DEBUGF(infof(data, "nread <= 0, server closed connection, bailing\n")); + /* if we receive 0 or less here, either the http2 stream is closed or the + server closed the connection and we bail out from this! */ +#ifdef USE_NGHTTP2 + if(is_http2 && !nread) + DEBUGF(infof(data, "nread == 0, stream closed, bailing\n")); + else +#endif + DEBUGF(infof(data, "nread <= 0, server closed connection, bailing\n")); k->keepon &= ~KEEP_RECV; break; } |