about to begin. This includes all pre-transfer commands and negotiations that
are specific to the particular protocol(s) involved.
.TP
+.B time_starttransfer
+The time, in seconds, it took from the start until the first byte is just about
+to be transfered. This includes time_pretransfer and also the time the
+server needs to calculate the result.
+.TP
.B size_download
The total amount of bytes that were downloaded.
.TP
pre-transfer commands and negotiations that are specific to the particular
protocol(s) involved.
.TP
+.B CURLINFO_STARTTRANSFER_TIME
+Pass a pointer to a double to receive the time, in seconds, it took from the
+start until the first byte is just about to be transfered. This includes
+CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate
+the result.
+.TP
.B CURLINFO_SIZE_UPLOAD
Pass a pointer to a double to receive the total amount of bytes that were
uploaded.
void curl_global_cleanup(void);
/* This is the version number */
-#define LIBCURL_VERSION "7.9.1"
-#define LIBCURL_VERSION_NUM 0x070901
+#define LIBCURL_VERSION "7.9.2-pre3"
+#define LIBCURL_VERSION_NUM 0x070902
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
struct curl_slist {
CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15,
CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16,
- CURLINFO_LASTONE = 17
+ CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
+
+ CURLINFO_LASTONE = 18
} CURLINFO;
/* unfortunately, the easy.h include file needs the options and info stuff
pro->t_nslookup = 0;
pro->t_connect = 0;
pro->t_pretransfer = 0;
+ pro->t_starttransfer = 0;
info->httpcode = 0;
info->httpversion=0;
case CURLINFO_PRETRANSFER_TIME:
*param_doublep = data->progress.t_pretransfer;
break;
+ case CURLINFO_STARTTRANSFER_TIME:
+ *param_doublep = data->progress.t_starttransfer;
+ break;
case CURLINFO_SIZE_UPLOAD:
*param_doublep = data->progress.uploaded;
break;
/* mistake filter */
break;
case TIMER_STARTSINGLE:
- /* This is set at the start of a single fetch, there may be several
- fetches within an operation, why we add all other times relative
- to this one */
+ /* This is set at the start of a single fetch */
data->progress.t_startsingle = Curl_tvnow();
break;
case TIMER_NAMELOOKUP:
- data->progress.t_nslookup +=
+ data->progress.t_nslookup =
(double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
break;
case TIMER_CONNECT:
- data->progress.t_connect +=
+ data->progress.t_connect =
(double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
break;
case TIMER_PRETRANSFER:
- data->progress.t_pretransfer +=
+ data->progress.t_pretransfer =
+ (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
+ break;
+ case TIMER_STARTTRANSFER:
+ data->progress.t_starttransfer =
(double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
break;
case TIMER_POSTRANSFER:
/* The exact time spent so far (from the start) */
timespent = (double)Curl_tvdiff (now, data->progress.start)/1000;
- data->progress.timespent = (long)timespent;
+ data->progress.timespent = timespent;
/* The average download speed this far */
data->progress.dlspeed =
TIMER_NAMELOOKUP,
TIMER_CONNECT,
TIMER_PRETRANSFER,
+ TIMER_STARTTRANSFER,
TIMER_POSTRANSFER,
TIMER_STARTSINGLE,
TIMER_LAST /* must be last */
}
break;
default:
+ if ((bytecount == 0) && (writebytecount == 0))
+ Curl_pgrsTime(data, TIMER_STARTTRANSFER);
if((keepon & KEEP_READ) && FD_ISSET(conn->sockfd, &readfd)) {
/* read! */
urg = Curl_read(conn, conn->sockfd, buf, BUFSIZE -1, &nread);
int width; /* screen width at download start */
int flags; /* see progress.h */
- long timespent;
+ double timespent;
double dlspeed;
double ulspeed;
double t_nslookup;
double t_connect;
double t_pretransfer;
+ double t_starttransfer;
struct timeval start;
struct timeval t_startsingle;
VAR_NAMELOOKUP_TIME,
VAR_CONNECT_TIME,
VAR_PRETRANSFER_TIME,
+ VAR_STARTTRANSFER_TIME,
VAR_SIZE_DOWNLOAD,
VAR_SIZE_UPLOAD,
VAR_SPEED_DOWNLOAD,
{"time_namelookup", VAR_NAMELOOKUP_TIME},
{"time_connect", VAR_CONNECT_TIME},
{"time_pretransfer", VAR_PRETRANSFER_TIME},
+ {"time_starttransfer", VAR_STARTTRANSFER_TIME},
{"size_header", VAR_HEADER_SIZE},
{"size_request", VAR_REQUEST_SIZE},
{"size_download", VAR_SIZE_DOWNLOAD},
curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &doubleinfo))
fprintf(stream, "%.3f", doubleinfo);
break;
+ case VAR_STARTTRANSFER_TIME:
+ if(CURLE_OK ==
+ curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &doubleinfo))
+ fprintf(stream, "%.3f", doubleinfo);
+ break;
case VAR_SIZE_UPLOAD:
if(CURLE_OK ==
curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &doubleinfo))