MINOR: http: Add enum etag_type http_get_etag_type(const struct ist)

http_get_etag_type returns whether a given `etag` is a strong, weak, or invalid
ETag.
This commit is contained in:
Tim Duesterhus 2020-10-22 10:36:24 +02:00 committed by William Lallemand
parent 1e690bb6c4
commit 2493ee81d4
2 changed files with 27 additions and 0 deletions

View File

@ -124,6 +124,12 @@ struct http_method_desc {
const struct ist text;
};
enum http_etag_type {
ETAG_INVALID = 0,
ETAG_STRONG,
ETAG_WEAK
};
#endif /* _HAPROXY_HTTP_T_H */
/*

View File

@ -104,6 +104,27 @@ static inline int http_language_range_match(const char *range, int range_len,
return tag == tend;
}
static inline enum http_etag_type http_get_etag_type(const struct ist etag)
{
/* An ETag must be at least 2 characters. */
if (etag.len < 2)
return ETAG_INVALID;
/* The last character must be a `"`. */
if (etag.ptr[etag.len - 1] != '"')
return ETAG_INVALID;
/* If the ETag starts with a `"` then it is a strong ETag. */
if (etag.ptr[0] == '"')
return ETAG_STRONG;
/* If the ETag starts with `W/"` then it is a weak ETag. */
if (istnmatch(etag, ist("W/\""), 3))
return ETAG_WEAK;
return ETAG_INVALID;
}
#endif /* _HAPROXY_HTTP_H */