- CURLINFO_CONDITION_UNMET was added to allow an application to get to know if

the condition in the previous request was unmet. This is typically a time
  condition set with CURLOPT_TIMECONDITION and was previously not possible to
  reliably figure out. From bug report #2565128
  (http://curl.haxx.se/bug/view.cgi?id=2565128)
This commit is contained in:
Daniel Stenberg 2009-02-11 21:47:14 +00:00
parent fb8fdf9273
commit 002cf105c6
10 changed files with 37 additions and 7 deletions

View file

@ -2045,6 +2045,7 @@ static CURLcode ftp_state_mdtm_resp(struct connectdata *conn,
if(data->info.filetime <= data->set.timevalue) {
infof(data, "The requested document is not new enough\n");
ftp->transfer = FTPTRANSFER_NONE; /* mark this to not transfer data */
data->info.timecond = TRUE;
state(conn, FTP_STOP);
return CURLE_OK;
}
@ -2053,6 +2054,7 @@ static CURLcode ftp_state_mdtm_resp(struct connectdata *conn,
if(data->info.filetime > data->set.timevalue) {
infof(data, "The requested document is not old enough\n");
ftp->transfer = FTPTRANSFER_NONE; /* mark this to not transfer data */
data->info.timecond = TRUE;
state(conn, FTP_STOP);
return CURLE_OK;
}

View file

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
* Copyright (C) 1998 - 2009, 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
@ -228,6 +228,10 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
ptr.to_certinfo = &data->info.certs;
*param_slistp = ptr.to_slist;
break;
case CURLINFO_CONDITION_UNMET:
/* return if the condition prevented the document to get transfered */
*param_longp = data->info.timecond;
break;
default:
return CURLE_BAD_FUNCTION_ARGUMENT;
}

View file

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
* Copyright (C) 1998 - 2009, 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
@ -497,6 +497,7 @@ static CURLcode readwrite_data(struct SessionHandle *data,
infof(data,
"The requested document is not new enough\n");
*done = TRUE;
data->info.timecond = TRUE;
return CURLE_OK;
}
break;
@ -505,6 +506,7 @@ static CURLcode readwrite_data(struct SessionHandle *data,
infof(data,
"The requested document is not old enough\n");
*done = TRUE;
data->info.timecond = TRUE;
return CURLE_OK;
}
break;
@ -1107,6 +1109,8 @@ static CURLcode readwrite_http_headers(struct SessionHandle *data,
* MUST NOT contain a message-body, and thus is always
* terminated by the first empty line after the header
* fields. */
if(data->set.timecondition)
data->info.timecond = TRUE;
k->size=0;
k->maxdownload=0;
k->ignorecl = TRUE; /* ignore Content-Length headers */

View file

@ -1063,6 +1063,8 @@ struct PureInfo {
was unretrievable. We cannot have this of type time_t,
since time_t is unsigned on several platforms such as
OpenVMS. */
bool timecond; /* set to TRUE if the time condition didn't match, which
thus made the document NOT get fetched */
long header_size; /* size of read header(s) in bytes */
long request_size; /* the amount of bytes sent in the request(s) */
long proxyauthavail; /* what proxy auth types were announced */