mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -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 */
|
||||
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 */
|
||||
|
11
lib/http2.c
11
lib/http2.c
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user