From 23698aecf844c105b210fa42b642c1d0203978c9 Mon Sep 17 00:00:00 2001 From: John-Mark Bell Date: Mon, 10 Jun 2019 21:35:36 +0000 Subject: HTTP: expose validity of max-age in Cache-Control As max-age is an optional directive, provide a means to determine if it is present and correct. --- utils/http/cache-control.c | 10 ++++++++++ utils/http/cache-control.h | 8 ++++++++ 2 files changed, 18 insertions(+) (limited to 'utils') diff --git a/utils/http/cache-control.c b/utils/http/cache-control.c index f348f1614..44700821d 100644 --- a/utils/http/cache-control.c +++ b/utils/http/cache-control.c @@ -30,6 +30,7 @@ */ struct http_cache_control { uint32_t max_age; /**< Max age (delta seconds) */ + bool max_age_valid; /**< Whether max-age is valid */ bool no_cache; /**< Whether caching is forbidden */ bool no_store; /**< Whether persistent caching is forbidden */ }; @@ -240,6 +241,7 @@ nserror http_parse_cache_control(const char *header_value, http_directive *directives = NULL; lwc_string *value_str = NULL; uint32_t max_age = 0; + bool max_age_valid = false; bool no_cache = false; bool no_store = false; nserror error; @@ -279,6 +281,7 @@ nserror http_parse_cache_control(const char *header_value, corestring_lwc_max_age, &value_str); if (error == NSERROR_OK && value_str != NULL) { error = parse_max_age(value_str, &max_age); + max_age_valid = (error == NSERROR_OK); lwc_string_unref(value_str); } @@ -310,6 +313,7 @@ nserror http_parse_cache_control(const char *header_value, } cc->max_age = max_age; + cc->max_age_valid = max_age_valid; cc->no_cache = no_cache; cc->no_store = no_store; @@ -324,6 +328,12 @@ void http_cache_control_destroy(http_cache_control *victim) free(victim); } +/* See cache-control.h for documentation */ +bool http_cache_control_has_max_age(http_cache_control *cc) +{ + return cc->max_age_valid; +} + /* See cache-control.h for documentation */ uint32_t http_cache_control_max_age(http_cache_control *cc) { diff --git a/utils/http/cache-control.h b/utils/http/cache-control.h index 22c5f97ac..945cfcec0 100644 --- a/utils/http/cache-control.h +++ b/utils/http/cache-control.h @@ -42,6 +42,14 @@ nserror http_parse_cache_control(const char *header_value, */ void http_cache_control_destroy(http_cache_control *victim); +/** + * Determine if a valid max-age directive is present + * + * \param cc Object to inspect + * \return Whether max-age is valid + */ +bool http_cache_control_has_max_age(http_cache_control *cc); + /** * Get the value of a cache control's max-age * -- cgit v1.2.3