http2: switch recv/send functions to http2 ones after 101

This commit is contained in:
Daniel Stenberg 2013-09-18 22:43:13 +02:00
parent 8d3608f2ad
commit 53940f8834
2 changed files with 40 additions and 1 deletions

View File

@ -152,6 +152,9 @@ struct HTTP {
struct http_conn {
#ifdef USE_NGHTTP2
nghttp2_session *h2;
char *mem; /* points to a buffer in memory to store or read from */
size_t size; /* size of the buffer 'mem' points to */
ssize_t nread; /* how much data that was sent/recv by the HTTP2 engine */
#else
int unused; /* prevent a compiler warning */
#endif

View File

@ -111,7 +111,7 @@ static ssize_t recv_callback(nghttp2_session *h2,
{
struct connectdata *conn = (struct connectdata *)userp;
ssize_t nread;
CURLcode rc = Curl_read(conn, conn->sock[0], (char *)buf, length, &nread);
CURLcode rc = Curl_read_plain(conn->sock[0], (char *)buf, length, &nread);
(void)h2;
(void)flags;
@ -208,10 +208,46 @@ CURLcode Curl_http2_request(Curl_send_buffer *req,
return result;
}
/*
* If the read would block (EWOULDBLOCK) we return -1. Otherwise we return
* a regular CURLcode value.
*/
static ssize_t http2_recv(struct connectdata *conn, int sockindex,
char *mem, size_t len, CURLcode *err)
{
int rc;
(void)sockindex; /* we always do HTTP2 on sockindex 0 */
conn->proto.httpc.mem = mem;
conn->proto.httpc.size = len;
rc = nghttp2_session_recv(conn->proto.httpc.h2);
if(rc < 0) {
*err = CURLE_RECV_ERROR;
}
return 0;
}
/* return number of received (decrypted) bytes */
static ssize_t http2_send(struct connectdata *conn, int sockindex,
const void *mem, size_t len, CURLcode *err)
{
/* TODO: proper implementation */
(void)conn;
(void)sockindex;
(void)mem;
(void)len;
(void)err;
return 0;
}
void Curl_http2_switched(struct connectdata *conn)
{
/* we are switched! */
conn->handler = &Curl_handler_http2;
conn->recv[FIRSTSOCKET] = http2_recv;
conn->send[FIRSTSOCKET] = http2_send;
infof(conn->data, "We have switched to HTTP2\n");
}