Loading lib/http.h +1 −1 Original line number Diff line number Diff line Loading @@ -157,7 +157,7 @@ struct http_conn { size_t binlen; /* length of the binsettings data */ char *mem; /* points to a buffer in memory to store or read from */ size_t len; /* size of the buffer 'mem' points to */ ssize_t nread; /* how much data that was sent/recv by the HTTP2 engine */ bool bodystarted; #else int unused; /* prevent a compiler warning */ #endif Loading lib/http2.c +14 −4 Original line number Diff line number Diff line Loading @@ -138,13 +138,21 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags, infof(conn->data, "on_data_chunk_recv() " "len = %u, stream = %x\n", len, stream_id); if(!c->bodystarted) { memcpy(c->mem, "\r\n", 2); /* signal end of headers */ c->mem += 2; c->len -= 2; c->bodystarted = TRUE; } if(len < c->len) { memcpy(c->mem, data, len); c->mem += len; c->len -= len; } else { infof(conn->data, "EEEEEEK\n"); infof(conn->data, "EEEEEEK: %d > %d\n", len, c->len); /* return NGHTTP2_ERR_PAUSE; */ } return 0; Loading Loading @@ -242,7 +250,6 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame, c->mem[namelen + valuelen + 2]='\n'; c->mem[namelen + valuelen + 3]=0; /* to display this easier */ } infof(conn->data, "Got %s", c->mem); c->mem += hlen; c->len -= hlen; Loading Loading @@ -366,7 +373,8 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex, conn->proto.httpc.mem = mem; conn->proto.httpc.len = len; infof(conn->data, "http2_recv\n"); infof(conn->data, "http2_recv: %d bytes buffer\n", conn->proto.httpc.len); for(;;) { rc = Curl_read_plain(conn->sock[FIRSTSOCKET], inbuf, H2_BUFSIZE, &nread); Loading @@ -383,7 +391,7 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex, *err = CURLE_RECV_ERROR; return 0; } infof(conn->data, "nread=%zd\n", nread); if(!nread) { *err = CURLE_RECV_ERROR; return 0; /* TODO EOF? */ Loading @@ -401,6 +409,7 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex, /* Happens when NGHTTP2_ERR_PAUSE is returned from user callback */ break; } break; } return len - conn->proto.httpc.len; } Loading @@ -427,6 +436,7 @@ int Curl_http2_switched(struct connectdata *conn) conn->recv[FIRSTSOCKET] = http2_recv; conn->send[FIRSTSOCKET] = http2_send; infof(conn->data, "We have switched to HTTP2\n"); httpc->bodystarted = FALSE; /* send the SETTINGS frame (again) */ rc = nghttp2_session_upgrade(httpc->h2, httpc->binsettings, httpc->binlen, Loading Loading
lib/http.h +1 −1 Original line number Diff line number Diff line Loading @@ -157,7 +157,7 @@ struct http_conn { size_t binlen; /* length of the binsettings data */ char *mem; /* points to a buffer in memory to store or read from */ size_t len; /* size of the buffer 'mem' points to */ ssize_t nread; /* how much data that was sent/recv by the HTTP2 engine */ bool bodystarted; #else int unused; /* prevent a compiler warning */ #endif Loading
lib/http2.c +14 −4 Original line number Diff line number Diff line Loading @@ -138,13 +138,21 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags, infof(conn->data, "on_data_chunk_recv() " "len = %u, stream = %x\n", len, stream_id); if(!c->bodystarted) { memcpy(c->mem, "\r\n", 2); /* signal end of headers */ c->mem += 2; c->len -= 2; c->bodystarted = TRUE; } if(len < c->len) { memcpy(c->mem, data, len); c->mem += len; c->len -= len; } else { infof(conn->data, "EEEEEEK\n"); infof(conn->data, "EEEEEEK: %d > %d\n", len, c->len); /* return NGHTTP2_ERR_PAUSE; */ } return 0; Loading Loading @@ -242,7 +250,6 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame, c->mem[namelen + valuelen + 2]='\n'; c->mem[namelen + valuelen + 3]=0; /* to display this easier */ } infof(conn->data, "Got %s", c->mem); c->mem += hlen; c->len -= hlen; Loading Loading @@ -366,7 +373,8 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex, conn->proto.httpc.mem = mem; conn->proto.httpc.len = len; infof(conn->data, "http2_recv\n"); infof(conn->data, "http2_recv: %d bytes buffer\n", conn->proto.httpc.len); for(;;) { rc = Curl_read_plain(conn->sock[FIRSTSOCKET], inbuf, H2_BUFSIZE, &nread); Loading @@ -383,7 +391,7 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex, *err = CURLE_RECV_ERROR; return 0; } infof(conn->data, "nread=%zd\n", nread); if(!nread) { *err = CURLE_RECV_ERROR; return 0; /* TODO EOF? */ Loading @@ -401,6 +409,7 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex, /* Happens when NGHTTP2_ERR_PAUSE is returned from user callback */ break; } break; } return len - conn->proto.httpc.len; } Loading @@ -427,6 +436,7 @@ int Curl_http2_switched(struct connectdata *conn) conn->recv[FIRSTSOCKET] = http2_recv; conn->send[FIRSTSOCKET] = http2_send; infof(conn->data, "We have switched to HTTP2\n"); httpc->bodystarted = FALSE; /* send the SETTINGS frame (again) */ rc = nghttp2_session_upgrade(httpc->h2, httpc->binsettings, httpc->binlen, Loading