summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPeter Simonyi <pts@petersimonyi.ca>2019-07-10 18:42:35 -0400
committerDaniel Stenberg <daniel@haxx.se>2019-07-14 16:17:15 +0200
commit855887af7928d70a2938b7c9c750a0c237c47c15 (patch)
tree615789bd873a7166126fd2489bd17bd2264a5dc4 /lib
parentac3d19a26de79d9ec62d20a1a0b645d7ddcc40fd (diff)
downloadcurl-855887af7928d70a2938b7c9c750a0c237c47c15.tar.gz
http: allow overriding timecond with custom header
With CURLOPT_TIMECONDITION set, a header is automatically added (e.g. If-Modified-Since). Allow this to be replaced or suppressed with CURLOPT_HTTPHEADER. Fixes #4103 Closes #4109
Diffstat (limited to 'lib')
-rw-r--r--lib/http.c14
-rw-r--r--lib/http.h2
-rw-r--r--lib/rtsp.c2
3 files changed, 12 insertions, 6 deletions
diff --git a/lib/http.c b/lib/http.c
index ccf64a270..9fbd7201e 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -1881,9 +1881,10 @@ CURLcode Curl_add_custom_headers(struct connectdata *conn,
}
#ifndef CURL_DISABLE_PARSEDATE
-CURLcode Curl_add_timecondition(struct Curl_easy *data,
+CURLcode Curl_add_timecondition(const struct connectdata *conn,
Curl_send_buffer *req_buffer)
{
+ struct Curl_easy *data = conn->data;
const struct tm *tm;
struct tm keeptime;
CURLcode result;
@@ -1916,6 +1917,11 @@ CURLcode Curl_add_timecondition(struct Curl_easy *data,
break;
}
+ if(Curl_checkheaders(conn, condp)) {
+ /* A custom header was specified; it will be sent instead. */
+ return CURLE_OK;
+ }
+
/* The If-Modified-Since header family should have their times set in
* GMT as RFC2616 defines: "All HTTP date/time stamps MUST be
* represented in Greenwich Mean Time (GMT), without exception. For the
@@ -1941,10 +1947,10 @@ CURLcode Curl_add_timecondition(struct Curl_easy *data,
}
#else
/* disabled */
-CURLcode Curl_add_timecondition(struct Curl_easy *data,
+CURLcode Curl_add_timecondition(const struct connectdata *conn,
Curl_send_buffer *req_buffer)
{
- (void)data;
+ (void)conn;
(void)req_buffer;
return CURLE_OK;
}
@@ -2683,7 +2689,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
}
#endif
- result = Curl_add_timecondition(data, req_buffer);
+ result = Curl_add_timecondition(conn, req_buffer);
if(result)
return result;
diff --git a/lib/http.h b/lib/http.h
index 5af80e75d..72161f6b0 100644
--- a/lib/http.h
+++ b/lib/http.h
@@ -69,7 +69,7 @@ CURLcode Curl_add_buffer_send(Curl_send_buffer **inp,
size_t included_body_bytes,
int socketindex);
-CURLcode Curl_add_timecondition(struct Curl_easy *data,
+CURLcode Curl_add_timecondition(const struct connectdata *conn,
Curl_send_buffer *buf);
CURLcode Curl_add_custom_headers(struct connectdata *conn,
bool is_connect,
diff --git a/lib/rtsp.c b/lib/rtsp.c
index 74cf23244..25e194a23 100644
--- a/lib/rtsp.c
+++ b/lib/rtsp.c
@@ -491,7 +491,7 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
return result;
if((rtspreq == RTSPREQ_SETUP) || (rtspreq == RTSPREQ_DESCRIBE)) {
- result = Curl_add_timecondition(data, req_buffer);
+ result = Curl_add_timecondition(conn, req_buffer);
if(result)
return result;
}