mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 15:48:49 -05:00
transfer: add Curl_meets_timecondition()
This will be used by file_do() and Curl_readwrite() as a unified method of checking to see if a remote document meets the supplied CURLOPT_TIMEVAL and CURLOPT_TIMECONDITION. Signed-off-by: Dave Reisner <d@falconindy.com>
This commit is contained in:
parent
819dfddc58
commit
99dcb11ed8
@ -355,6 +355,37 @@ static void read_rewind(struct connectdata *conn,
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Check to see if CURLOPT_TIMECONDITION was met by comparing the time of the
|
||||
* remote document with the time provided by CURLOPT_TIMEVAL
|
||||
*/
|
||||
bool Curl_meets_timecondition(struct SessionHandle *data, long timeofdoc)
|
||||
{
|
||||
if((timeofdoc == 0) || (data->set.timevalue == 0))
|
||||
return TRUE;
|
||||
|
||||
switch(data->set.timecondition) {
|
||||
case CURL_TIMECOND_IFMODSINCE:
|
||||
default:
|
||||
if(timeofdoc <= data->set.timevalue) {
|
||||
infof(data,
|
||||
"The requested document is not new enough\n");
|
||||
data->info.timecond = TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
case CURL_TIMECOND_IFUNMODSINCE:
|
||||
if(timeofdoc >= data->set.timevalue) {
|
||||
infof(data,
|
||||
"The requested document is not old enough\n");
|
||||
data->info.timecond = TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Go ahead and do a read if we have a readable socket or if
|
||||
@ -518,29 +549,11 @@ static CURLcode readwrite_data(struct SessionHandle *data,
|
||||
requested. This seems to be what chapter 13.3.4 of
|
||||
RFC 2616 defines to be the correct action for a
|
||||
HTTP/1.1 client */
|
||||
if((k->timeofdoc > 0) && (data->set.timevalue > 0)) {
|
||||
switch(data->set.timecondition) {
|
||||
case CURL_TIMECOND_IFMODSINCE:
|
||||
default:
|
||||
if(k->timeofdoc < data->set.timevalue) {
|
||||
infof(data,
|
||||
"The requested document is not new enough\n");
|
||||
*done = TRUE;
|
||||
data->info.timecond = TRUE;
|
||||
return CURLE_OK;
|
||||
}
|
||||
break;
|
||||
case CURL_TIMECOND_IFUNMODSINCE:
|
||||
if(k->timeofdoc > data->set.timevalue) {
|
||||
infof(data,
|
||||
"The requested document is not old enough\n");
|
||||
*done = TRUE;
|
||||
data->info.timecond = TRUE;
|
||||
return CURLE_OK;
|
||||
}
|
||||
break;
|
||||
} /* switch */
|
||||
} /* two valid time strings */
|
||||
|
||||
if(!Curl_meets_timecondition(data, k->timeofdoc)) {
|
||||
*done = TRUE;
|
||||
return CURLE_OK;
|
||||
}
|
||||
} /* we have a time condition */
|
||||
|
||||
} /* this is HTTP */
|
||||
|
@ -47,6 +47,7 @@ CURLcode Curl_readrewind(struct connectdata *conn);
|
||||
CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp);
|
||||
CURLcode Curl_reconnect_request(struct connectdata **connp);
|
||||
CURLcode Curl_retry_request(struct connectdata *conn, char **url);
|
||||
bool Curl_meets_timecondition(struct SessionHandle *data, long timeofdoc);
|
||||
|
||||
/* This sets up a forthcoming transfer */
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user