CURLINFO_REDIRECT_TIME and CURLINFO_REDIRECT_COUNT.
History of Changes
+Daniel (16 April 2002)
+- Dirk Manske brought a patch that introduced two new CURLINFO_* values:
+ CURLINFO_REDIRECT_TIME and CURLINFO_REDIRECT_COUNT.
+
+Daniel (15 April 2002)
+- Jonatan Lander patched the verbose text 'Disables POST, goes with GET' to
+ reflect reality better, like when the first request isn't POST and when
+ the second isn't GET... :-)
+
+- Craig Davison pointed out that when curl_formadd()ing a file that doesn't
+ exist, libcurl doesn't return error. Now, curl_easy_perform() will return
+ CURLE_READ_ERROR if that is the case. Test 41 was added to verify this.
+
+Version 7.9.6
+
Daniel (14 April 2002)
- Dirk Manske brought a fix that makes libcurl strip off white spaces from the
beginning of cookie contents.
CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18,
+ CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19,
+ CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20,
+
/* Fill in new entries here! */
- CURLINFO_LASTONE = 19
+ CURLINFO_LASTONE = 21
} CURLINFO;
/* unfortunately, the easy.h and multi.h include files need options and info
pro->t_pretransfer = 0;
pro->t_starttransfer = 0;
pro->timespent = 0;
+ pro->t_redirect = 0;
info->httpcode = 0;
info->httpversion=0;
case CURLINFO_CONTENT_LENGTH_UPLOAD:
*param_doublep = data->progress.size_ul;
break;
+ case CURLINFO_REDIRECT_TIME:
+ *param_doublep = data->progress.t_redirect;
+ break;
+ case CURLINFO_REDIRECT_COUNT:
+ *param_longp = data->set.followlocation;
+ break;
case CURLINFO_CONTENT_TYPE:
*param_charp = data->info.contenttype;
break;
}
}
+/* reset all times except redirect */
+void Curl_pgrsResetTimes(struct SessionHandle *data)
+{
+ data->progress.t_nslookup = 0.0;
+ data->progress.t_connect = 0.0;
+ data->progress.t_pretransfer = 0.0;
+ data->progress.t_starttransfer = 0.0;
+}
+
void Curl_pgrsTime(struct SessionHandle *data, timerid timer)
{
switch(timer) {
case TIMER_POSTRANSFER:
/* this is the normal end-of-transfer thing */
break;
+ case TIMER_REDIRECT:
+ data->progress.t_redirect =
+ (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
+ break;
}
}
TIMER_STARTTRANSFER,
TIMER_POSTRANSFER,
TIMER_STARTSINGLE,
+ TIMER_REDIRECT,
TIMER_LAST /* must be last */
} timerid;
void Curl_pgrsSetDownloadCounter(struct SessionHandle *data, double size);
void Curl_pgrsSetUploadCounter(struct SessionHandle *data, double size);
int Curl_pgrsUpdate(struct connectdata *);
+void Curl_pgrsResetTimes(struct SessionHandle *data);
void Curl_pgrsTime(struct SessionHandle *data, timerid timer);
*/
break;
}
+ Curl_pgrsTime(data, TIMER_REDIRECT);
+ Curl_pgrsResetTimes(data);
continue;
}
}
double t_connect;
double t_pretransfer;
double t_starttransfer;
+ double t_redirect;
struct timeval start;
struct timeval t_startsingle;