mirror of
https://github.com/curl/curl.git
synced 2026-08-26 05:23:33 +03:00
lib: move client writer into own source
Refactoring of the client writer that passes the data to the client/application's callback functions. - split out into own source cw-out.[ch] from sendf.c - move tempwrite and tempcount from data->state into the context of the client writer - redesign the 3 tempwrite dynbufs as a linked list of dynbufs. On paused transfers, this allows to "record" interleaved HEADER/BODY chunks to be "played back" in the same order on unpausing. - keep the overall size limit of all buffered data to DYN_PAUSE_BUFFER. On exceeding that, return CURLE_TOO_LARGE instead of CURLE_OUT_OF_MEMORY as before. - add method to be called when a transfer is DONE to allow writing of any data still buffered - when paused, record HEADER writes exactly as they come for later playback. HEADERs are documented to be written one-by-one. Closes #12898
This commit is contained in:
parent
2254551403
commit
463472a2d6
10 changed files with 538 additions and 227 deletions
|
|
@ -645,7 +645,7 @@ static CURLcode multi_done(struct Curl_easy *data,
|
|||
after an error was detected */
|
||||
bool premature)
|
||||
{
|
||||
CURLcode result;
|
||||
CURLcode result, r2;
|
||||
struct connectdata *conn = data->conn;
|
||||
|
||||
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
|
||||
|
|
@ -696,6 +696,11 @@ static CURLcode multi_done(struct Curl_easy *data,
|
|||
result = CURLE_ABORTED_BY_CALLBACK;
|
||||
}
|
||||
|
||||
/* Make sure that transfer client writes are really done now. */
|
||||
r2 = Curl_xfer_write_done(data, premature);
|
||||
if(r2 && !result)
|
||||
result = r2;
|
||||
|
||||
/* Inform connection filters that this transfer is done */
|
||||
Curl_conn_ev_data_done(data, premature);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue