curl-library
[PATCH 1/2] transfer: add Curl_meets_timecondition()
From: Dave Reisner <d_at_falconindy.com>
Date: Sat, 29 Jan 2011 22:12:33 -0500
Date: Sat, 29 Jan 2011 22:12:33 -0500
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_at_falconindy.com>
Signed-off-by: Kamil Dudka <kdudka_at_redhat.com>
---
lib/transfer.c | 59 ++++++++++++++++++++++++++++++++++---------------------
lib/transfer.h | 1 +
2 files changed, 37 insertions(+), 23 deletions(-)
diff --git a/lib/transfer.c b/lib/transfer.c
index e84b8b1..f316000 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 790e1e3..c966caf 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
--
1.7.3.5
--------------070204090408000103000505
Content-Type: text/x-patch;
name="0002-file-add-support-for-CURLOPT_TIMECONDITION.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename*0="0002-file-add-support-for-CURLOPT_TIMECONDITION.patch"
Received on 2001-09-17