mirror of
https://github.com/curl/curl.git
synced 2026-08-25 08:23:31 +03:00
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:
parent
6a688976f0
commit
b0143a2a33
10 changed files with 31 additions and 38 deletions
28
lib/http.c
28
lib/http.c
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue