read_callback: move to SessionHandle from connectdata

With many easy handles using the same connection for multiplexing, it is
important we store and keep the transfer-oriented stuff in the
SessionHandle so that callbacks and callback data work fine even when
many easy handles share the same physical connection.
This commit is contained in:
Daniel Stenberg 2015-05-20 14:33:04 +02:00
parent 6a688976f0
commit b0143a2a33
10 changed files with 31 additions and 38 deletions

View file

@ -1016,8 +1016,8 @@ static size_t readmoredata(char *buffer,
/* move backup data into focus and continue on that */
http->postdata = http->backup.postdata;
http->postsize = http->backup.postsize;
conn->fread_func = http->backup.fread_func;
conn->fread_in = http->backup.fread_in;
conn->data->set.fread_func = http->backup.fread_func;
conn->data->set.in = http->backup.fread_in;
http->sending++; /* move one step up */
@ -1172,14 +1172,14 @@ CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
ptr = in->buffer + amount;
/* backup the currently set pointers */
http->backup.fread_func = conn->fread_func;
http->backup.fread_in = conn->fread_in;
http->backup.fread_func = conn->data->set.fread_func;
http->backup.fread_in = conn->data->set.in;
http->backup.postdata = http->postdata;
http->backup.postsize = http->postsize;
/* set the new pointers for the request-sending */
conn->fread_func = (curl_read_callback)readmoredata;
conn->fread_in = (void *)conn;
conn->data->set.fread_func = (curl_read_callback)readmoredata;
conn->data->set.in = (void *)conn;
http->postdata = ptr;
http->postsize = (curl_off_t)size;
@ -1475,8 +1475,8 @@ CURLcode Curl_http_done(struct connectdata *conn,
#endif
/* set the proper values (possibly modified on POST) */
conn->fread_func = data->set.fread_func; /* restore */
conn->fread_in = data->set.in; /* restore */
data->set.fread_func = data->set.fread_func; /* restore */
data->set.in = data->set.in; /* restore */
conn->seek_func = data->set.seek_func; /* restore */
conn->seek_client = data->set.seek_client; /* restore */
@ -2447,14 +2447,14 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
/* Get the currently set callback function pointer and store that in the
form struct since we might want the actual user-provided callback later
on. The conn->fread_func pointer itself will be changed for the
on. The data->set.fread_func pointer itself will be changed for the
multipart case to the function that returns a multipart formatted
stream. */
http->form.fread_func = conn->fread_func;
http->form.fread_func = data->set.fread_func;
/* Set the read function to read from the generated form data */
conn->fread_func = (curl_read_callback)Curl_FormReader;
conn->fread_in = &http->form;
data->set.fread_func = (curl_read_callback)Curl_FormReader;
data->set.in = &http->form;
http->sending = HTTPSEND_BODY;
@ -2672,8 +2672,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
http->sending = HTTPSEND_BODY;
conn->fread_func = (curl_read_callback)readmoredata;
conn->fread_in = (void *)conn;
data->set.fread_func = (curl_read_callback)readmoredata;
data->set.in = (void *)conn;
/* set the upload size to the progress meter */
Curl_pgrsSetUploadSize(data, http->postsize);