]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
HTTP: partial start at fixing up hash-lookups on http2 frame receival
authorDaniel Stenberg <daniel@haxx.se>
Tue, 28 Apr 2015 18:39:47 +0000 (20:39 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 18 May 2015 06:57:17 +0000 (08:57 +0200)
lib/http.h
lib/http2.c

index 1fa85f76b0effa3cfcd00bb4b20b03df136e04b1..b53b963fa37acad725b01dc4f2fbcd5f55f58364 100644 (file)
@@ -155,6 +155,11 @@ struct HTTP {
 
   /* for HTTP/2 we store stream-local data here */
   int32_t stream_id; /* stream we are interested in */
+
+  /* We store non-final and final response headers here, per-stream */
+  Curl_send_buffer *header_recvbuf;
+  size_t nread_header_recvbuf; /* number of bytes in header_recvbuf fed into
+                                  upper layer */
 };
 
 typedef int (*sending)(void); /* Curl_send */
@@ -173,11 +178,6 @@ struct http_conn {
   recving recv_underlying; /* underlying recv Curl_recv callback */
   bool closed; /* TRUE on HTTP2 stream close */
   uint32_t error_code; /* HTTP/2 error code */
-  Curl_send_buffer *header_recvbuf; /* store response headers.  We
-                                       store non-final and final
-                                       response headers into it. */
-  size_t nread_header_recvbuf; /* number of bytes in header_recvbuf
-                                  fed into upper layer */
   const uint8_t *data; /* pointer to data chunk, received in
                           on_data_chunk */
   size_t datalen; /* the number of bytes left in data */
index 21096015745fe6edfe88fb9807926dbee12b1579..6d25efc985f6fc3f9c5798a1b994c5890f156364 100644 (file)
@@ -84,9 +84,6 @@ static CURLcode http2_disconnect(struct connectdata *conn,
 
   nghttp2_session_del(c->h2);
 
-  Curl_safefree(c->header_recvbuf->buffer);
-  Curl_safefree(c->header_recvbuf);
-
   Curl_safefree(c->inbuf);
 
   DEBUGF(infof(conn->data, "HTTP/2 DISCONNECT done\n"));
@@ -167,7 +164,7 @@ static ssize_t send_callback(nghttp2_session *h2,
   (void)flags;
 
   written = ((Curl_send*)c->send_underlying)(conn, FIRSTSOCKET,
-                                                 data, length, &result);
+                                             data, length, &result);
 
   if(result == CURLE_AGAIN) {
     return NGHTTP2_ERR_WOULDBLOCK;
@@ -249,6 +246,9 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
 
     c->status_code = -1;
 
+    /* get the stream from the hash based on Stream ID */
+    rv = Curl_hash_pick()
+
     Curl_add_buffer(c->header_recvbuf, "\r\n", 2);
 
     left = c->header_recvbuf->size_used - c->nread_header_recvbuf;
@@ -619,8 +619,7 @@ CURLcode Curl_http2_init(struct connectdata *conn)
     nghttp2_session_callbacks_set_on_header_callback(callbacks, on_header);
 
     /* The nghttp2 session is not yet setup, do it */
-    rc = nghttp2_session_client_new(&conn->proto.httpc.h2,
-                                    callbacks, conn);
+    rc = nghttp2_session_client_new(&conn->proto.httpc.h2, callbacks, conn);
 
     nghttp2_session_callbacks_del(callbacks);