summaryrefslogtreecommitdiff
path: root/lib/http.h
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2014-02-14 22:02:44 +0900
committerDaniel Stenberg <daniel@haxx.se>2014-02-17 23:45:58 +0100
commit035b91a26c363db566578f49aec30ab8527581a7 (patch)
tree158869798ec2e44c3647a64742d2da9f829f90b4 /lib/http.h
parente9dfdef4111dca11d3cbf84d64372af56e9d9e09 (diff)
downloadcurl-035b91a26c363db566578f49aec30ab8527581a7.tar.gz
http2: Support HTTP POST/PUT
This patch enables HTTP POST/PUT in HTTP2. We disabled Expect header field and chunked transfer encoding since HTTP2 forbids them. In HTTP1, Curl sends small upload data with request headers, but HTTP2 requires upload data must be in DATA frame separately. So we added some conditionals to achieve this.
Diffstat (limited to 'lib/http.h')
-rw-r--r--lib/http.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/http.h b/lib/http.h
index db322bf96..407f7b621 100644
--- a/lib/http.h
+++ b/lib/http.h
@@ -158,7 +158,7 @@ struct http_conn {
nghttp2_session *h2;
uint8_t binsettings[H2_BINSETTINGS_LEN];
size_t binlen; /* length of the binsettings data */
- char *mem; /* points to a buffer in memory to store or read from */
+ char *mem; /* points to a buffer in memory to store */
size_t len; /* size of the buffer 'mem' points to */
bool bodystarted;
sending send_underlying; /* underlying send Curl_send callback */
@@ -172,6 +172,14 @@ struct http_conn {
on_data_chunk */
size_t datalen; /* the number of bytes left in data */
char *inbuf; /* buffer to receive data from underlying socket */
+ /* We need separate buffer for transmission and reception because we
+ may call nghttp2_session_send() after the
+ nghttp2_session_mem_recv() but mem buffer is still not full. In
+ this case, we wrongly sends the content of mem buffer if we share
+ them for both cases. */
+ const uint8_t *upload_mem; /* points to a buffer to read from */
+ size_t upload_len; /* size of the buffer 'upload_mem' points to */
+ size_t upload_left; /* number of bytes left to upload */
#else
int unused; /* prevent a compiler warning */
#endif