aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2015-04-02 00:28:58 +0900
committerDaniel Stenberg <daniel@haxx.se>2015-04-02 15:19:29 +0200
commit21e82bd635124881a4a2ac08b3b9b28efe98afee (patch)
treeb619753f1d34ba0addcaeb9d63df46c464c4dda4
parent2685041a5c285968696de639699fb39a0fdf8c69 (diff)
http2: Fix missing nghttp2_session_send call in Curl_http2_switched
Previously in Curl_http2_switched, we called nghttp2_session_mem_recv to parse incoming data which were already received while curl was handling upgrade. But we didn't call nghttp2_session_send, and it led to make curl not send any response to the received frames. Most likely, we received SETTINGS from server at this point, so we missed opportunity to send SETTINGS + ACK. This commit adds missing nghttp2_session_send call in Curl_http2_switched to fix this issue. Bug: https://github.com/bagder/curl/issues/192 Reported-by: Stefan Eissing
-rw-r--r--lib/http2.c9
-rw-r--r--tests/data/test18015
2 files changed, 11 insertions, 3 deletions
diff --git a/lib/http2.c b/lib/http2.c
index 658d6141e..9410cf282 100644
--- a/lib/http2.c
+++ b/lib/http2.c
@@ -1062,6 +1062,15 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
return CURLE_HTTP2;
}
+ /* Try to send some frames since we may read SETTINGS already. */
+ rv = nghttp2_session_send(httpc->h2);
+
+ if(rv != 0) {
+ failf(data, "nghttp2_session_send() failed: %s(%d)",
+ nghttp2_strerror(rv), rv);
+ return CURLE_HTTP2;
+ }
+
return CURLE_OK;
}
diff --git a/tests/data/test1801 b/tests/data/test1801
index a95e76a22..0aedfed51 100644
--- a/tests/data/test1801
+++ b/tests/data/test1801
@@ -23,7 +23,6 @@ lies!
<datacheck>
HTTP/1.1 101 Switching!
-
</datacheck>
# listen to the upgrade request!
@@ -62,9 +61,9 @@ Upgrade: %H2CVER
HTTP2-Settings: AAMAAABkAAQAAP__
</protocol>
-# nothing is returned, because no HTTP/2 data nor headers was handled
+# CURLE_HTTP2: Send failure: Broken pipe
<errorcode>
-56
+16
</errorcode>
</verify>
</testcase>