From: Dave Reisner Date: Sun, 30 Jan 2011 03:12:33 +0000 (-0500) Subject: transfer: add Curl_meets_timecondition() X-Git-Tag: curl-7_21_4~28 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=99dcb11ed8bd78d3af47c6ce3cc6b1fa4c51fdf8;p=thirdparty%2Fcurl.git 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 --- diff --git a/lib/transfer.c b/lib/transfer.c index e84b8b14cb..f316000a12 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -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 */ diff --git a/lib/transfer.h b/lib/transfer.h index 790e1e3ef8..c966cafb0f 100644 --- a/lib/transfer.h +++ b/lib/transfer.h @@ -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