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.
This commit is contained in:
John-Mark Bell 2019-06-10 21:35:36 +00:00
parent 047c82cfce
commit 23698aecf8
2 changed files with 18 additions and 0 deletions

View File

@ -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)
{

View File

@ -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
*