summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKwon-Young Choi <kwon-young.choi@hotmail.fr>2020-04-04 17:27:18 +0200
committerDaniel Stenberg <daniel@haxx.se>2020-04-05 11:13:49 +0200
commit54ecc11cc4c4cf4a6ed958fd2906f3a791d1c8d2 (patch)
treed53c220ef41aa1d1a4d7debcf70fbae216ab9744
parenta448a4ce2615373fc63818afede79550f2ca6a14 (diff)
downloadcurl-54ecc11cc4c4cf4a6ed958fd2906f3a791d1c8d2.tar.gz
CURLINFO_CONDITION_UNMET: return true for 304 http status code
In libcurl, CURLINFO_CONDITION_UNMET is used to avoid writing to the output file if the server did not transfered a file based on time condition. In the same manner, getting a 304 HTTP response back from the server, for example after passing a custom If-Match-* header, also fulfill this condition. Fixes #5181 Closes #5183
-rw-r--r--docs/libcurl/curl_easy_getinfo.32
-rw-r--r--docs/libcurl/opts/CURLINFO_CONDITION_UNMET.36
-rw-r--r--lib/getinfo.c7
3 files changed, 10 insertions, 5 deletions
diff --git a/docs/libcurl/curl_easy_getinfo.3 b/docs/libcurl/curl_easy_getinfo.3
index c7b124a24..647165358 100644
--- a/docs/libcurl/curl_easy_getinfo.3
+++ b/docs/libcurl/curl_easy_getinfo.3
@@ -210,7 +210,7 @@ TLS session info that can be used for further processing. See
\fICURLINFO_TLS_SESSION(3)\fP. Deprecated option, use
\fICURLINFO_TLS_SSL_PTR(3)\fP instead!
.IP CURLINFO_CONDITION_UNMET
-Whether or not a time conditional was met.
+Whether or not a time conditional was met or 304 HTTP response.
See \fICURLINFO_CONDITION_UNMET(3)\fP
.IP CURLINFO_RTSP_SESSION_ID
RTSP session ID.
diff --git a/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3 b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3
index 27488656e..78c28fa02 100644
--- a/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3
+++ b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3
@@ -22,7 +22,7 @@
.\"
.TH CURLINFO_CONDITION_UNMET 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
.SH NAME
-CURLINFO_CONDITION_UNMET \- get info on unmet time conditional
+CURLINFO_CONDITION_UNMET \- get info on unmet time conditional or 304 HTTP response.
.SH SYNOPSIS
#include <curl/curl.h>
@@ -32,7 +32,9 @@ Pass a pointer to a long to receive the number 1 if the condition provided in
the previous request didn't match (see \fICURLOPT_TIMECONDITION(3)\fP). Alas,
if this returns a 1 you know that the reason you didn't get data in return is
because it didn't fulfill the condition. The long this argument points to will
-get a zero stored if the condition instead was met.
+get a zero stored if the condition instead was met. This can also return 1 if
+the server responded with a 304 HTTP status code, for example after sending a
+custom "If-Match-*" header.
.SH PROTOCOLS
HTTP and some
.SH EXAMPLE
diff --git a/lib/getinfo.c b/lib/getinfo.c
index 18274e964..84d9fc1c6 100644
--- a/lib/getinfo.c
+++ b/lib/getinfo.c
@@ -239,8 +239,11 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
*param_longp = data->info.conn_local_port;
break;
case CURLINFO_CONDITION_UNMET:
- /* return if the condition prevented the document to get transferred */
- *param_longp = data->info.timecond ? 1L : 0L;
+ if(data->info.httpcode == 304)
+ *param_longp = 1L;
+ else
+ /* return if the condition prevented the document to get transferred */
+ *param_longp = data->info.timecond ? 1L : 0L;
break;
case CURLINFO_RTSP_CLIENT_CSEQ:
*param_longp = data->state.rtsp_next_client_CSeq;