Commit 1112981e authored by Sergey Lyubka's avatar Sergey Lyubka

Fix mg_if_not_modified() logic

    PUBLISHED_FROM=3eb1455eacc66af83904f56397c0e24b1d4f13bf
parent 0cf82744
...@@ -103,6 +103,7 @@ MG_INTERNAL size_t mg_handle_chunked(struct mg_connection *nc, ...@@ -103,6 +103,7 @@ MG_INTERNAL size_t mg_handle_chunked(struct mg_connection *nc,
#ifndef MG_DISABLE_FILESYSTEM #ifndef MG_DISABLE_FILESYSTEM
MG_INTERNAL time_t mg_parse_date_string(const char *datetime); MG_INTERNAL time_t mg_parse_date_string(const char *datetime);
MG_INTERNAL int mg_is_not_modified(struct http_message *hm, cs_stat_t *st);
#endif #endif
/* Forward declarations for testing. */ /* Forward declarations for testing. */
...@@ -5981,13 +5982,17 @@ MG_INTERNAL time_t mg_parse_date_string(const char *datetime) { ...@@ -5981,13 +5982,17 @@ MG_INTERNAL time_t mg_parse_date_string(const char *datetime) {
return result; return result;
} }
static int mg_is_not_modified(struct http_message *hm, cs_stat_t *st) { MG_INTERNAL int mg_is_not_modified(struct http_message *hm, cs_stat_t *st) {
struct mg_str *hdr;
if ((hdr = mg_get_http_header(hm, "If-None-Match")) != NULL) {
char etag[64]; char etag[64];
struct mg_str *ims = mg_get_http_header(hm, "If-Modified-Since");
struct mg_str *inm = mg_get_http_header(hm, "If-None-Match");
construct_etag(etag, sizeof(etag), st); construct_etag(etag, sizeof(etag), st);
return (inm != NULL && !mg_vcasecmp(inm, etag)) || return mg_vcasecmp(hdr, etag) == 0;
(ims != NULL && st->st_mtime <= mg_parse_date_string(ims->p)); } else if ((hdr = mg_get_http_header(hm, "If-Modified-Since")) != NULL) {
return st->st_mtime <= mg_parse_date_string(hdr->p);
} else {
return 0;
}
} }
static void mg_send_digest_auth_request(struct mg_connection *c, static void mg_send_digest_auth_request(struct mg_connection *c,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment