urldata: simplify bytecounters
- no need to have them protocol specific - no need to set pointers to them with the Curl_setup_transfer() call - make Curl_setup_transfer() operate on a transfer pointer, not connection - switch some counters from long to the more proper curl_off_t type Closes #3627
This commit is contained in:
Родитель
8cf6c170cf
Коммит
65eb65fde6
|
@ -5,7 +5,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 2010, Howard Chu, <hyc@highlandsun.com>
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
|
@ -239,17 +239,18 @@ static CURLcode rtmp_connect(struct connectdata *conn, bool *done)
|
|||
|
||||
static CURLcode rtmp_do(struct connectdata *conn, bool *done)
|
||||
{
|
||||
struct Curl_easy *data = conn->data;
|
||||
RTMP *r = conn->proto.generic;
|
||||
|
||||
if(!RTMP_ConnectStream(r, 0))
|
||||
return CURLE_FAILED_INIT;
|
||||
|
||||
if(conn->data->set.upload) {
|
||||
Curl_pgrsSetUploadSize(conn->data, conn->data->state.infilesize);
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
|
||||
Curl_pgrsSetUploadSize(data, data->state.infilesize);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);
|
||||
}
|
||||
else
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1);
|
||||
*done = TRUE;
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
|
11
lib/dict.c
11
lib/dict.c
|
@ -5,7 +5,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
@ -137,7 +137,6 @@ static CURLcode dict_do(struct connectdata *conn, bool *done)
|
|||
curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
|
||||
|
||||
char *path = data->state.up.path;
|
||||
curl_off_t *bytecount = &data->req.bytecount;
|
||||
|
||||
*done = TRUE; /* unconditionally */
|
||||
|
||||
|
@ -200,8 +199,7 @@ static CURLcode dict_do(struct connectdata *conn, bool *done)
|
|||
failf(data, "Failed sending DICT request");
|
||||
return result;
|
||||
}
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
|
||||
-1, NULL); /* no upload */
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1); /* no upload */
|
||||
}
|
||||
else if(strncasecompare(path, DICT_DEFINE, sizeof(DICT_DEFINE)-1) ||
|
||||
strncasecompare(path, DICT_DEFINE2, sizeof(DICT_DEFINE2)-1) ||
|
||||
|
@ -247,8 +245,7 @@ static CURLcode dict_do(struct connectdata *conn, bool *done)
|
|||
failf(data, "Failed sending DICT request");
|
||||
return result;
|
||||
}
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
|
||||
-1, NULL); /* no upload */
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1);
|
||||
}
|
||||
else {
|
||||
|
||||
|
@ -270,7 +267,7 @@ static CURLcode dict_do(struct connectdata *conn, bool *done)
|
|||
return result;
|
||||
}
|
||||
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount, -1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
35
lib/ftp.c
35
lib/ftp.c
|
@ -448,7 +448,6 @@ static CURLcode ReceivedServerConnect(struct connectdata *conn, bool *received)
|
|||
static CURLcode InitiateTransfer(struct connectdata *conn)
|
||||
{
|
||||
struct Curl_easy *data = conn->data;
|
||||
struct FTP *ftp = data->req.protop;
|
||||
CURLcode result = CURLE_OK;
|
||||
|
||||
if(conn->bits.ftp_use_data_ssl) {
|
||||
|
@ -461,24 +460,19 @@ static CURLcode InitiateTransfer(struct connectdata *conn)
|
|||
}
|
||||
|
||||
if(conn->proto.ftpc.state_saved == FTP_STOR) {
|
||||
*(ftp->bytecountp) = 0;
|
||||
|
||||
/* When we know we're uploading a specified file, we can get the file
|
||||
size prior to the actual upload. */
|
||||
|
||||
Curl_pgrsSetUploadSize(data, data->state.infilesize);
|
||||
|
||||
/* set the SO_SNDBUF for the secondary socket for those who need it */
|
||||
Curl_sndbufset(conn->sock[SECONDARYSOCKET]);
|
||||
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */
|
||||
SECONDARYSOCKET, ftp->bytecountp);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, SECONDARYSOCKET);
|
||||
}
|
||||
else {
|
||||
/* FTP download: */
|
||||
Curl_setup_transfer(conn, SECONDARYSOCKET,
|
||||
conn->proto.ftpc.retr_size_saved, FALSE,
|
||||
ftp->bytecountp, -1, NULL); /* no upload here */
|
||||
Curl_setup_transfer(data, SECONDARYSOCKET,
|
||||
conn->proto.ftpc.retr_size_saved, FALSE, -1);
|
||||
}
|
||||
|
||||
conn->proto.ftpc.pp.pending_resp = TRUE; /* expect server response */
|
||||
|
@ -1658,7 +1652,7 @@ static CURLcode ftp_state_ul_setup(struct connectdata *conn,
|
|||
infof(data, "File already completely uploaded\n");
|
||||
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
|
||||
/* Set ->transfer so that we won't get any error in
|
||||
* ftp_done() because we didn't transfer anything! */
|
||||
|
@ -2230,7 +2224,7 @@ static CURLcode ftp_state_retr(struct connectdata *conn,
|
|||
|
||||
if(ftp->downloadsize == 0) {
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
infof(data, "File already completely downloaded\n");
|
||||
|
||||
/* Set ->transfer so that we won't get any error in ftp_done()
|
||||
|
@ -3308,33 +3302,33 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
|
|||
;
|
||||
else if(data->set.upload) {
|
||||
if((-1 != data->state.infilesize) &&
|
||||
(data->state.infilesize != *ftp->bytecountp) &&
|
||||
(data->state.infilesize != data->req.writebytecount) &&
|
||||
!data->set.crlf &&
|
||||
(ftp->transfer == FTPTRANSFER_BODY)) {
|
||||
failf(data, "Uploaded unaligned file size (%" CURL_FORMAT_CURL_OFF_T
|
||||
" out of %" CURL_FORMAT_CURL_OFF_T " bytes)",
|
||||
*ftp->bytecountp, data->state.infilesize);
|
||||
data->req.bytecount, data->state.infilesize);
|
||||
result = CURLE_PARTIAL_FILE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if((-1 != data->req.size) &&
|
||||
(data->req.size != *ftp->bytecountp) &&
|
||||
(data->req.size != data->req.bytecount) &&
|
||||
#ifdef CURL_DO_LINEEND_CONV
|
||||
/* Most FTP servers don't adjust their file SIZE response for CRLFs, so
|
||||
* we'll check to see if the discrepancy can be explained by the number
|
||||
* of CRLFs we've changed to LFs.
|
||||
*/
|
||||
((data->req.size + data->state.crlf_conversions) !=
|
||||
*ftp->bytecountp) &&
|
||||
data->req.bytecount) &&
|
||||
#endif /* CURL_DO_LINEEND_CONV */
|
||||
(data->req.maxdownload != *ftp->bytecountp)) {
|
||||
(data->req.maxdownload != data->req.bytecount)) {
|
||||
failf(data, "Received only partial file: %" CURL_FORMAT_CURL_OFF_T
|
||||
" bytes", *ftp->bytecountp);
|
||||
" bytes", data->req.bytecount);
|
||||
result = CURLE_PARTIAL_FILE;
|
||||
}
|
||||
else if(!ftpc->dont_check &&
|
||||
!*ftp->bytecountp &&
|
||||
!data->req.bytecount &&
|
||||
(data->req.size>0)) {
|
||||
failf(data, "No data was received!");
|
||||
result = CURLE_FTP_COULDNT_RETR_FILE;
|
||||
|
@ -3629,7 +3623,7 @@ static CURLcode ftp_do_more(struct connectdata *conn, int *completep)
|
|||
if(!result && (ftp->transfer != FTPTRANSFER_BODY))
|
||||
/* no data to transfer. FIX: it feels like a kludge to have this here
|
||||
too! */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
|
||||
if(!ftpc->wait_data_conn) {
|
||||
/* no waiting for the data connection so this is now complete */
|
||||
|
@ -4308,7 +4302,7 @@ static CURLcode ftp_dophase_done(struct connectdata *conn,
|
|||
|
||||
if(ftp->transfer != FTPTRANSFER_BODY)
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(conn->data, -1, -1, FALSE, -1);
|
||||
else if(!connected)
|
||||
/* since we didn't connect now, we want do_more to get called */
|
||||
conn->bits.do_more = TRUE;
|
||||
|
@ -4427,7 +4421,6 @@ static CURLcode ftp_setup_connection(struct connectdata *conn)
|
|||
}
|
||||
|
||||
/* get some initial data into the ftp struct */
|
||||
ftp->bytecountp = &conn->data->req.bytecount;
|
||||
ftp->transfer = FTPTRANSFER_BODY;
|
||||
ftp->downloadsize = 0;
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
@ -102,7 +102,6 @@ typedef enum {
|
|||
perhaps the Curl_easy is changed between the times the connection is
|
||||
used. */
|
||||
struct FTP {
|
||||
curl_off_t *bytecountp;
|
||||
char *user; /* user name string */
|
||||
char *passwd; /* password string */
|
||||
char *path; /* points to the urlpieces struct field */
|
||||
|
|
|
@ -163,10 +163,10 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
|
|||
*param_longp = (long)data->info.filetime;
|
||||
break;
|
||||
case CURLINFO_HEADER_SIZE:
|
||||
*param_longp = data->info.header_size;
|
||||
*param_longp = (long)data->info.header_size;
|
||||
break;
|
||||
case CURLINFO_REQUEST_SIZE:
|
||||
*param_longp = data->info.request_size;
|
||||
*param_longp = (long)data->info.request_size;
|
||||
break;
|
||||
case CURLINFO_SSL_VERIFYRESULT:
|
||||
*param_longp = data->set.ssl.certverifyresult;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
@ -78,8 +78,6 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
|
|||
CURLcode result = CURLE_OK;
|
||||
struct Curl_easy *data = conn->data;
|
||||
curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
|
||||
|
||||
curl_off_t *bytecount = &data->req.bytecount;
|
||||
char *gopherpath;
|
||||
char *path = data->state.up.path;
|
||||
char *query = data->state.up.query;
|
||||
|
@ -167,8 +165,7 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
|
|||
if(result)
|
||||
return result;
|
||||
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
|
||||
-1, NULL); /* no upload */
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1);
|
||||
return CURLE_OK;
|
||||
}
|
||||
#endif /*CURL_DISABLE_GOPHER*/
|
||||
|
|
60
lib/http.c
60
lib/http.c
|
@ -416,7 +416,7 @@ static CURLcode http_perhapsrewind(struct connectdata *conn)
|
|||
break;
|
||||
}
|
||||
|
||||
bytessent = http->writebytecount;
|
||||
bytessent = data->req.writebytecount;
|
||||
|
||||
if(conn->bits.authneg) {
|
||||
/* This is a state where we are known to be negotiating and we don't send
|
||||
|
@ -1118,14 +1118,13 @@ void Curl_add_buffer_free(Curl_send_buffer **inp)
|
|||
CURLcode Curl_add_buffer_send(Curl_send_buffer **inp,
|
||||
struct connectdata *conn,
|
||||
|
||||
/* add the number of sent bytes to this
|
||||
counter */
|
||||
long *bytes_written,
|
||||
/* add the number of sent bytes to this
|
||||
counter */
|
||||
curl_off_t *bytes_written,
|
||||
|
||||
/* how much of the buffer contains body data */
|
||||
/* how much of the buffer contains body data */
|
||||
size_t included_body_bytes,
|
||||
int socketindex)
|
||||
|
||||
{
|
||||
ssize_t amount;
|
||||
CURLcode result;
|
||||
|
@ -1221,7 +1220,8 @@ CURLcode Curl_add_buffer_send(Curl_send_buffer **inp,
|
|||
if(http) {
|
||||
/* if we sent a piece of the body here, up the byte counter for it
|
||||
accordingly */
|
||||
http->writebytecount += bodylen;
|
||||
data->req.writebytecount += bodylen;
|
||||
Curl_pgrsSetUploadCounter(data, data->req.writebytecount);
|
||||
|
||||
if((size_t)amount != size) {
|
||||
/* The whole request could not be sent in one system call. We must
|
||||
|
@ -1583,16 +1583,6 @@ CURLcode Curl_http_done(struct connectdata *conn,
|
|||
|
||||
Curl_mime_cleanpart(&http->form);
|
||||
|
||||
switch(data->set.httpreq) {
|
||||
case HTTPREQ_PUT:
|
||||
case HTTPREQ_POST_FORM:
|
||||
case HTTPREQ_POST_MIME:
|
||||
data->req.bytecount = http->readbytecount + http->writebytecount;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if(status)
|
||||
return status;
|
||||
|
||||
|
@ -1600,7 +1590,7 @@ CURLcode Curl_http_done(struct connectdata *conn,
|
|||
entire operation is complete */
|
||||
!conn->bits.retry &&
|
||||
!data->set.connect_only &&
|
||||
(http->readbytecount +
|
||||
(data->req.bytecount +
|
||||
data->req.headerbytecount -
|
||||
data->req.deductheadercount) <= 0) {
|
||||
/* If this connection isn't simply closed to be retried, AND nothing was
|
||||
|
@ -2009,7 +1999,6 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||
|
||||
data->state.first_remote_port = conn->remote_port;
|
||||
}
|
||||
http->writebytecount = http->readbytecount = 0;
|
||||
|
||||
if((conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_FTP)) &&
|
||||
data->set.upload) {
|
||||
|
@ -2706,9 +2695,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||
failf(data, "Failed sending PUT request");
|
||||
else
|
||||
/* prepare for transfer */
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
|
||||
&http->readbytecount, postsize?FIRSTSOCKET:-1,
|
||||
postsize?&http->writebytecount:NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, TRUE,
|
||||
postsize?FIRSTSOCKET:-1);
|
||||
if(result)
|
||||
return result;
|
||||
break;
|
||||
|
@ -2728,8 +2716,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||
failf(data, "Failed sending POST request");
|
||||
else
|
||||
/* setup variables for the upcoming transfer */
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount,
|
||||
-1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, TRUE, -1);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2797,9 +2784,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||
failf(data, "Failed sending POST request");
|
||||
else
|
||||
/* prepare for transfer */
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
|
||||
&http->readbytecount, postsize?FIRSTSOCKET:-1,
|
||||
postsize?&http->writebytecount:NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, TRUE,
|
||||
postsize?FIRSTSOCKET:-1);
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
|
@ -2953,9 +2939,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||
if(result)
|
||||
failf(data, "Failed sending HTTP POST request");
|
||||
else
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
|
||||
&http->readbytecount, http->postdata?FIRSTSOCKET:-1,
|
||||
http->postdata?&http->writebytecount:NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, TRUE,
|
||||
http->postdata?FIRSTSOCKET:-1);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -2971,33 +2956,30 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
|
|||
failf(data, "Failed sending HTTP request");
|
||||
else
|
||||
/* HTTP GET/HEAD download: */
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount,
|
||||
http->postdata?FIRSTSOCKET:-1,
|
||||
http->postdata?&http->writebytecount:NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, TRUE,
|
||||
http->postdata?FIRSTSOCKET:-1);
|
||||
}
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
if(http->writebytecount) {
|
||||
if(data->req.writebytecount) {
|
||||
/* if a request-body has been sent off, we make sure this progress is noted
|
||||
properly */
|
||||
Curl_pgrsSetUploadCounter(data, http->writebytecount);
|
||||
Curl_pgrsSetUploadCounter(data, data->req.writebytecount);
|
||||
if(Curl_pgrsUpdate(conn))
|
||||
result = CURLE_ABORTED_BY_CALLBACK;
|
||||
|
||||
if(http->writebytecount >= postsize) {
|
||||
if(data->req.writebytecount >= postsize) {
|
||||
/* already sent the entire request body, mark the "upload" as
|
||||
complete */
|
||||
infof(data, "upload completely sent off: %" CURL_FORMAT_CURL_OFF_T
|
||||
" out of %" CURL_FORMAT_CURL_OFF_T " bytes\n",
|
||||
http->writebytecount, postsize);
|
||||
data->req.writebytecount, postsize);
|
||||
data->req.upload_done = TRUE;
|
||||
data->req.keepon &= ~KEEP_SEND; /* we're done writing */
|
||||
data->req.exp100 = EXP100_SEND_DATA; /* already sent */
|
||||
Curl_expire_done(data, EXPIRE_100_TIMEOUT);
|
||||
}
|
||||
else
|
||||
data->req.writebytecount = http->writebytecount;
|
||||
}
|
||||
|
||||
if((conn->httpversion == 20) && data->req.upload_chunky)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
@ -65,7 +65,7 @@ CURLcode Curl_add_buffer(Curl_send_buffer **inp, const void *inptr,
|
|||
size_t size) WARN_UNUSED_RESULT;
|
||||
CURLcode Curl_add_buffer_send(Curl_send_buffer **inp,
|
||||
struct connectdata *conn,
|
||||
long *bytes_written,
|
||||
curl_off_t *bytes_written,
|
||||
size_t included_body_bytes,
|
||||
int socketindex);
|
||||
|
||||
|
@ -139,8 +139,6 @@ struct HTTP {
|
|||
|
||||
const char *p_pragma; /* Pragma: string */
|
||||
const char *p_accept; /* Accept: string */
|
||||
curl_off_t readbytecount;
|
||||
curl_off_t writebytecount;
|
||||
|
||||
/* For FORM posting */
|
||||
curl_mimepart form;
|
||||
|
|
|
@ -1177,11 +1177,11 @@ static CURLcode imap_state_fetch_resp(struct connectdata *conn, int imapcode,
|
|||
|
||||
if(data->req.bytecount == size)
|
||||
/* The entire data is already transferred! */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
else {
|
||||
/* IMAP download */
|
||||
data->req.maxdownload = size;
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, size, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, size, FALSE, -1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -1231,7 +1231,7 @@ static CURLcode imap_state_append_resp(struct connectdata *conn, int imapcode,
|
|||
Curl_pgrsSetUploadSize(data, data->state.infilesize);
|
||||
|
||||
/* IMAP upload */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);
|
||||
|
||||
/* End of DO phase */
|
||||
state(conn, IMAP_STOP);
|
||||
|
@ -1660,7 +1660,7 @@ static CURLcode imap_dophase_done(struct connectdata *conn, bool connected)
|
|||
|
||||
if(imap->transfer != FTPTRANSFER_BODY)
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(conn->data, -1, -1, FALSE, -1);
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
@ -744,7 +744,7 @@ quit:
|
|||
#endif
|
||||
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
connclose(conn, "LDAP connection always disable re-use");
|
||||
|
||||
return result;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 2010, Howard Chu, <hyc@openldap.org>
|
||||
* Copyright (C) 2011 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 2011 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
@ -414,7 +414,7 @@ static CURLcode ldap_do(struct connectdata *conn, bool *done)
|
|||
return CURLE_OUT_OF_MEMORY;
|
||||
lr->msgid = msgid;
|
||||
data->req.protop = lr;
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1);
|
||||
*done = TRUE;
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
|
|
@ -912,7 +912,7 @@ static CURLcode pop3_state_command_resp(struct connectdata *conn,
|
|||
|
||||
if(pop3->transfer == FTPTRANSFER_BODY) {
|
||||
/* POP3 download */
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1);
|
||||
|
||||
if(pp->cache) {
|
||||
/* The header "cache" contains a bunch of data that is actually body
|
||||
|
|
16
lib/rtsp.c
16
lib/rtsp.c
|
@ -249,7 +249,6 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
|
|||
CURLcode result = CURLE_OK;
|
||||
Curl_RtspReq rtspreq = data->set.rtspreq;
|
||||
struct RTSP *rtsp = data->req.protop;
|
||||
struct HTTP *http;
|
||||
Curl_send_buffer *req_buffer;
|
||||
curl_off_t postsize = 0; /* for ANNOUNCE and SET_PARAMETER */
|
||||
curl_off_t putsize = 0; /* for ANNOUNCE and SET_PARAMETER */
|
||||
|
@ -268,10 +267,6 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
|
|||
|
||||
*done = TRUE;
|
||||
|
||||
http = &(rtsp->http_wrapper);
|
||||
/* Assert that no one has changed the RTSP struct in an evil way */
|
||||
DEBUGASSERT((void *)http == (void *)rtsp);
|
||||
|
||||
rtsp->CSeq_sent = data->state.rtsp_next_client_CSeq;
|
||||
rtsp->CSeq_recv = 0;
|
||||
|
||||
|
@ -328,8 +323,7 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
|
|||
}
|
||||
|
||||
if(rtspreq == RTSPREQ_RECEIVE) {
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
|
||||
&http->readbytecount, -1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, TRUE, -1);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -597,17 +591,15 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
|
|||
return result;
|
||||
}
|
||||
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount,
|
||||
putsize?FIRSTSOCKET:-1,
|
||||
putsize?&http->writebytecount:NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, -1, TRUE, putsize?FIRSTSOCKET:-1);
|
||||
|
||||
/* Increment the CSeq on success */
|
||||
data->state.rtsp_next_client_CSeq++;
|
||||
|
||||
if(http->writebytecount) {
|
||||
if(data->req.writebytecount) {
|
||||
/* if a request-body has been sent off, we make sure this progress is
|
||||
noted properly */
|
||||
Curl_pgrsSetUploadCounter(data, http->writebytecount);
|
||||
Curl_pgrsSetUploadCounter(data, data->req.writebytecount);
|
||||
if(Curl_pgrsUpdate(conn))
|
||||
result = CURLE_ABORTED_BY_CALLBACK;
|
||||
}
|
||||
|
|
|
@ -959,7 +959,7 @@ static CURLcode smtp_state_data_resp(struct connectdata *conn, int smtpcode,
|
|||
Curl_pgrsSetUploadSize(data, data->state.infilesize);
|
||||
|
||||
/* SMTP upload */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);
|
||||
|
||||
/* End of DO phase */
|
||||
state(conn, SMTP_STOP);
|
||||
|
@ -1388,7 +1388,7 @@ static CURLcode smtp_dophase_done(struct connectdata *conn, bool connected)
|
|||
|
||||
if(smtp->transfer != FTPTRANSFER_BODY)
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(conn->data, -1, -1, FALSE, -1);
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
|
|
@ -1200,7 +1200,7 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
Curl_pgrsSetUploadSize(data, data->state.infilesize);
|
||||
}
|
||||
/* upload data */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);
|
||||
|
||||
/* not set by Curl_setup_transfer to preserve keepon bits */
|
||||
conn->sockfd = conn->writesockfd;
|
||||
|
@ -1462,7 +1462,7 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
sshc->sftp_dir = NULL;
|
||||
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
state(conn, SSH_STOP);
|
||||
break;
|
||||
|
||||
|
@ -1603,13 +1603,12 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
/* Setup the actual download */
|
||||
if(data->req.size == 0) {
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
infof(data, "File already completely downloaded\n");
|
||||
state(conn, SSH_STOP);
|
||||
break;
|
||||
}
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, data->req.size,
|
||||
FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, data->req.size, FALSE, -1);
|
||||
|
||||
/* not set by Curl_setup_transfer to preserve keepon bits */
|
||||
conn->writesockfd = conn->sockfd;
|
||||
|
@ -1731,8 +1730,7 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
}
|
||||
|
||||
/* upload data */
|
||||
Curl_setup_transfer(conn, -1, data->req.size, FALSE, NULL,
|
||||
FIRSTSOCKET, NULL);
|
||||
Curl_setup_transfer(data, -1, data->req.size, FALSE, FIRSTSOCKET);
|
||||
|
||||
/* not set by Curl_setup_transfer to preserve keepon bits */
|
||||
conn->sockfd = conn->writesockfd;
|
||||
|
@ -1775,8 +1773,7 @@ static CURLcode myssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
/* download data */
|
||||
bytecount = ssh_scp_request_get_size(sshc->scp_session);
|
||||
data->req.maxdownload = (curl_off_t) bytecount;
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, bytecount, FALSE, NULL, -1,
|
||||
NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, bytecount, FALSE, -1);
|
||||
|
||||
/* not set by Curl_setup_transfer to preserve keepon bits */
|
||||
conn->writesockfd = conn->sockfd;
|
||||
|
|
14
lib/ssh.c
14
lib/ssh.c
|
@ -1808,7 +1808,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
Curl_pgrsSetUploadSize(data, data->state.infilesize);
|
||||
}
|
||||
/* upload data */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);
|
||||
|
||||
/* not set by Curl_setup_transfer to preserve keepon bits */
|
||||
conn->sockfd = conn->writesockfd;
|
||||
|
@ -2105,7 +2105,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
Curl_safefree(sshc->readdir_longentry);
|
||||
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
state(conn, SSH_STOP);
|
||||
break;
|
||||
|
||||
|
@ -2245,13 +2245,12 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
/* Setup the actual download */
|
||||
if(data->req.size == 0) {
|
||||
/* no data to transfer */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
infof(data, "File already completely downloaded\n");
|
||||
state(conn, SSH_STOP);
|
||||
break;
|
||||
}
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, data->req.size,
|
||||
FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, data->req.size, FALSE, -1);
|
||||
|
||||
/* not set by Curl_setup_transfer to preserve keepon bits */
|
||||
conn->writesockfd = conn->sockfd;
|
||||
|
@ -2395,8 +2394,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
}
|
||||
|
||||
/* upload data */
|
||||
Curl_setup_transfer(conn, -1, data->req.size, FALSE, NULL,
|
||||
FIRSTSOCKET, NULL);
|
||||
Curl_setup_transfer(data, -1, data->req.size, FALSE, FIRSTSOCKET);
|
||||
|
||||
/* not set by Curl_setup_transfer to preserve keepon bits */
|
||||
conn->sockfd = conn->writesockfd;
|
||||
|
@ -2467,7 +2465,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
|
|||
/* download data */
|
||||
bytecount = (curl_off_t)sb.st_size;
|
||||
data->req.maxdownload = (curl_off_t)sb.st_size;
|
||||
Curl_setup_transfer(conn, FIRSTSOCKET, bytecount, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, FIRSTSOCKET, bytecount, FALSE, -1);
|
||||
|
||||
/* not set by Curl_setup_transfer to preserve keepon bits */
|
||||
conn->writesockfd = conn->sockfd;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
@ -1692,7 +1692,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
|
|||
}
|
||||
#endif
|
||||
/* mark this as "no further transfer wanted" */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -1247,7 +1247,7 @@ static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done)
|
|||
*done = (state->state == TFTP_STATE_FIN) ? TRUE : FALSE;
|
||||
if(*done)
|
||||
/* Tell curl we're done */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
}
|
||||
else {
|
||||
/* no timeouts to handle, check our socket */
|
||||
|
@ -1270,7 +1270,7 @@ static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done)
|
|||
*done = (state->state == TFTP_STATE_FIN) ? TRUE : FALSE;
|
||||
if(*done)
|
||||
/* Tell curl we're done */
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
}
|
||||
/* if rc == 0, then select() timed out */
|
||||
}
|
||||
|
|
|
@ -1198,6 +1198,7 @@ static CURLcode readwrite_upload(struct Curl_easy *data,
|
|||
(size_t)bytes_written);
|
||||
|
||||
k->writebytecount += bytes_written;
|
||||
Curl_pgrsSetUploadCounter(data, k->writebytecount);
|
||||
|
||||
if((!k->upload_chunky || k->forbidchunk) &&
|
||||
(k->writebytecount == data->state.infilesize)) {
|
||||
|
@ -1231,7 +1232,6 @@ static CURLcode readwrite_upload(struct Curl_easy *data,
|
|||
}
|
||||
}
|
||||
|
||||
Curl_pgrsSetUploadCounter(data, k->writebytecount);
|
||||
|
||||
} WHILE_FALSE; /* just to break out from! */
|
||||
|
||||
|
@ -1309,11 +1309,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
|
|||
|
||||
k->now = Curl_now();
|
||||
if(didwhat) {
|
||||
/* Update read/write counters */
|
||||
if(k->bytecountp)
|
||||
*k->bytecountp = k->bytecount; /* read count */
|
||||
if(k->writebytecountp)
|
||||
*k->writebytecountp = k->writebytecount; /* write count */
|
||||
;
|
||||
}
|
||||
else {
|
||||
/* no read no write, this is a timeout? */
|
||||
|
@ -1857,8 +1853,7 @@ CURLcode Curl_retry_request(struct connectdata *conn,
|
|||
|
||||
|
||||
if(conn->handler->protocol&PROTO_FAMILY_HTTP) {
|
||||
struct HTTP *http = data->req.protop;
|
||||
if(http->writebytecount) {
|
||||
if(data->req.writebytecount) {
|
||||
CURLcode result = Curl_readrewind(conn);
|
||||
if(result) {
|
||||
Curl_safefree(*url);
|
||||
|
@ -1876,24 +1871,17 @@ CURLcode Curl_retry_request(struct connectdata *conn,
|
|||
*/
|
||||
void
|
||||
Curl_setup_transfer(
|
||||
struct connectdata *conn, /* connection data */
|
||||
struct Curl_easy *data, /* transfer */
|
||||
int sockindex, /* socket index to read from or -1 */
|
||||
curl_off_t size, /* -1 if unknown at this point */
|
||||
bool getheader, /* TRUE if header parsing is wanted */
|
||||
curl_off_t *bytecountp, /* return number of bytes read or NULL */
|
||||
int writesockindex, /* socket index to write to, it may very well be
|
||||
int writesockindex /* socket index to write to, it may very well be
|
||||
the same we read from. -1 disables */
|
||||
curl_off_t *writecountp /* return number of bytes written or NULL */
|
||||
)
|
||||
{
|
||||
struct Curl_easy *data;
|
||||
struct SingleRequest *k;
|
||||
|
||||
struct SingleRequest *k = &data->req;
|
||||
struct connectdata *conn = data->conn;
|
||||
DEBUGASSERT(conn != NULL);
|
||||
|
||||
data = conn->data;
|
||||
k = &data->req;
|
||||
|
||||
DEBUGASSERT((sockindex <= 1) && (sockindex >= -1));
|
||||
|
||||
if(conn->bits.multiplex || conn->httpversion == 20) {
|
||||
|
@ -1912,8 +1900,6 @@ Curl_setup_transfer(
|
|||
k->getheader = getheader;
|
||||
|
||||
k->size = size;
|
||||
k->bytecountp = bytecountp;
|
||||
k->writebytecountp = writecountp;
|
||||
|
||||
/* The code sequence below is placed in this function just because all
|
||||
necessary input is not always known in do_complete() as this function may
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
|
@ -59,15 +59,13 @@ CURLcode Curl_get_upload_buffer(struct Curl_easy *data);
|
|||
|
||||
/* This sets up a forthcoming transfer */
|
||||
void
|
||||
Curl_setup_transfer (struct connectdata *data,
|
||||
int sockindex, /* socket index to read from or -1 */
|
||||
curl_off_t size, /* -1 if unknown at this point */
|
||||
bool getheader, /* TRUE if header parsing is wanted */
|
||||
curl_off_t *bytecountp, /* return number of bytes read */
|
||||
int writesockindex, /* socket index to write to, it may
|
||||
very well be the same we read from.
|
||||
-1 disables */
|
||||
curl_off_t *writecountp /* return number of bytes written */
|
||||
);
|
||||
Curl_setup_transfer (struct Curl_easy *data,
|
||||
int sockindex, /* socket index to read from or -1 */
|
||||
curl_off_t size, /* -1 if unknown at this point */
|
||||
bool getheader, /* TRUE if header parsing is wanted */
|
||||
int writesockindex /* socket index to write to. May be
|
||||
the same we read from. -1
|
||||
disables */
|
||||
);
|
||||
|
||||
#endif /* HEADER_CURL_TRANSFER_H */
|
||||
|
|
|
@ -3796,9 +3796,8 @@ static CURLcode create_conn(struct Curl_easy *data,
|
|||
(void)conn->handler->done(conn, result, FALSE);
|
||||
goto out;
|
||||
}
|
||||
|
||||
Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */
|
||||
-1, NULL); /* no upload */
|
||||
Curl_attach_connnection(data, conn);
|
||||
Curl_setup_transfer(data, -1, -1, FALSE, -1);
|
||||
}
|
||||
|
||||
/* since we skip do_init() */
|
||||
|
@ -4178,7 +4177,8 @@ CURLcode Curl_connect(struct Curl_easy *data,
|
|||
connectdata struct, free those here */
|
||||
Curl_disconnect(data, conn, TRUE);
|
||||
}
|
||||
else
|
||||
else if(!data->conn)
|
||||
/* FILE: transfers already have the connection attached */
|
||||
Curl_attach_connnection(data, conn);
|
||||
|
||||
return result;
|
||||
|
|
|
@ -538,21 +538,18 @@ struct dohdata {
|
|||
*/
|
||||
struct SingleRequest {
|
||||
curl_off_t size; /* -1 if unknown at this point */
|
||||
curl_off_t *bytecountp; /* return number of bytes read or NULL */
|
||||
|
||||
curl_off_t maxdownload; /* in bytes, the maximum amount of data to fetch,
|
||||
-1 means unlimited */
|
||||
curl_off_t *writebytecountp; /* return number of bytes written or NULL */
|
||||
|
||||
curl_off_t bytecount; /* total number of bytes read */
|
||||
curl_off_t writebytecount; /* number of bytes written */
|
||||
|
||||
long headerbytecount; /* only count received headers */
|
||||
long deductheadercount; /* this amount of bytes doesn't count when we check
|
||||
if anything has been transferred at the end of a
|
||||
connection. We use this counter to make only a
|
||||
100 reply (without a following second response
|
||||
code) result in a CURLE_GOT_NOTHING error code */
|
||||
curl_off_t headerbytecount; /* only count received headers */
|
||||
curl_off_t deductheadercount; /* this amount of bytes doesn't count when we
|
||||
check if anything has been transferred at
|
||||
the end of a connection. We use this
|
||||
counter to make only a 100 reply (without a
|
||||
following second response code) result in a
|
||||
CURLE_GOT_NOTHING error code */
|
||||
|
||||
struct curltime start; /* transfer started at this time */
|
||||
struct curltime now; /* current time */
|
||||
|
@ -1046,8 +1043,8 @@ struct PureInfo {
|
|||
int httpversion; /* the http version number X.Y = X*10+Y */
|
||||
time_t filetime; /* If requested, this is might get set. Set to -1 if the
|
||||
time was unretrievable. */
|
||||
long header_size; /* size of read header(s) in bytes */
|
||||
long request_size; /* the amount of bytes sent in the request(s) */
|
||||
curl_off_t header_size; /* size of read header(s) in bytes */
|
||||
curl_off_t request_size; /* the amount of bytes sent in the request(s) */
|
||||
unsigned long proxyauthavail; /* what proxy auth types were announced */
|
||||
unsigned long httpauthavail; /* what host auth types were announced */
|
||||
long numconnects; /* how many new connection did libcurl created */
|
||||
|
|
Загрузка…
Ссылка в новой задаче