mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
HTTP: partial start at fixing up hash-lookups on http2 frame receival
This commit is contained in:
parent
77f1029ecd
commit
5fe71975e4
10
lib/http.h
10
lib/http.h
@ -155,6 +155,11 @@ struct HTTP {
|
|||||||
|
|
||||||
/* for HTTP/2 we store stream-local data here */
|
/* for HTTP/2 we store stream-local data here */
|
||||||
int32_t stream_id; /* stream we are interested in */
|
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 */
|
typedef int (*sending)(void); /* Curl_send */
|
||||||
@ -173,11 +178,6 @@ struct http_conn {
|
|||||||
recving recv_underlying; /* underlying recv Curl_recv callback */
|
recving recv_underlying; /* underlying recv Curl_recv callback */
|
||||||
bool closed; /* TRUE on HTTP2 stream close */
|
bool closed; /* TRUE on HTTP2 stream close */
|
||||||
uint32_t error_code; /* HTTP/2 error code */
|
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
|
const uint8_t *data; /* pointer to data chunk, received in
|
||||||
on_data_chunk */
|
on_data_chunk */
|
||||||
size_t datalen; /* the number of bytes left in data */
|
size_t datalen; /* the number of bytes left in data */
|
||||||
|
11
lib/http2.c
11
lib/http2.c
@ -84,9 +84,6 @@ static CURLcode http2_disconnect(struct connectdata *conn,
|
|||||||
|
|
||||||
nghttp2_session_del(c->h2);
|
nghttp2_session_del(c->h2);
|
||||||
|
|
||||||
Curl_safefree(c->header_recvbuf->buffer);
|
|
||||||
Curl_safefree(c->header_recvbuf);
|
|
||||||
|
|
||||||
Curl_safefree(c->inbuf);
|
Curl_safefree(c->inbuf);
|
||||||
|
|
||||||
DEBUGF(infof(conn->data, "HTTP/2 DISCONNECT done\n"));
|
DEBUGF(infof(conn->data, "HTTP/2 DISCONNECT done\n"));
|
||||||
@ -167,7 +164,7 @@ static ssize_t send_callback(nghttp2_session *h2,
|
|||||||
(void)flags;
|
(void)flags;
|
||||||
|
|
||||||
written = ((Curl_send*)c->send_underlying)(conn, FIRSTSOCKET,
|
written = ((Curl_send*)c->send_underlying)(conn, FIRSTSOCKET,
|
||||||
data, length, &result);
|
data, length, &result);
|
||||||
|
|
||||||
if(result == CURLE_AGAIN) {
|
if(result == CURLE_AGAIN) {
|
||||||
return NGHTTP2_ERR_WOULDBLOCK;
|
return NGHTTP2_ERR_WOULDBLOCK;
|
||||||
@ -249,6 +246,9 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
|
|||||||
|
|
||||||
c->status_code = -1;
|
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);
|
Curl_add_buffer(c->header_recvbuf, "\r\n", 2);
|
||||||
|
|
||||||
left = c->header_recvbuf->size_used - c->nread_header_recvbuf;
|
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);
|
nghttp2_session_callbacks_set_on_header_callback(callbacks, on_header);
|
||||||
|
|
||||||
/* The nghttp2 session is not yet setup, do it */
|
/* The nghttp2 session is not yet setup, do it */
|
||||||
rc = nghttp2_session_client_new(&conn->proto.httpc.h2,
|
rc = nghttp2_session_client_new(&conn->proto.httpc.h2, callbacks, conn);
|
||||||
callbacks, conn);
|
|
||||||
|
|
||||||
nghttp2_session_callbacks_del(callbacks);
|
nghttp2_session_callbacks_del(callbacks);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user