]> git.ipfire.org Git - thirdparty/squid.git/blame - src/ETag.cc
Boilerplate: update copyright blurbs on src/
[thirdparty/squid.git] / src / ETag.cc
CommitLineData
a9771e51 1/*
bbc27441 2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
e25c139f 3 *
bbc27441
AJ
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
a9771e51 7 */
8
f7f3304a 9#include "squid.h"
81a94152
AJ
10#include "ETag.h"
11
81a94152 12#include <cstring>
a9771e51 13
14/*
15 * Note: ETag is not an http "field" like, for example HttpHdrRange. ETag is a
16 * field-value that maybe used in many http fields.
17 */
18
bd76482d
AR
19/// whether etag strings match
20static bool
21etagStringsMatch(const ETag &tag1, const ETag &tag2)
22{
23 return !strcmp(tag1.str, tag2.str);
24}
25
a9771e51 26/* parses a string as weak or strong entity-tag; returns true on success */
27/* note: we do not duplicate "str"! */
28int
0cdcddb9 29etagParseInit(ETag * etag, const char *str)
a9771e51 30{
31 int len;
32 assert(etag && str);
33 etag->str = NULL;
34 etag->weak = !strncmp(str, "W/", 2);
62e76326 35
a9771e51 36 if (etag->weak)
62e76326 37 str += 2;
38
a9771e51 39 /* check format (quoted-string) */
40 len = strlen(str);
62e76326 41
0cdcddb9 42 if (len >= 2 && str[0] == '"' && str[len - 1] == '"')
62e76326 43 etag->str = str;
44
a9771e51 45 return etag->str != NULL;
46}
47
bd76482d
AR
48bool
49etagIsStrongEqual(const ETag &tag1, const ETag &tag2)
50{
51 return !tag1.weak && !tag2.weak && etagStringsMatch(tag1, tag2);
52}
53
54bool
55etagIsWeakEqual(const ETag &tag1, const ETag &tag2)
a9771e51 56{
bd76482d 57 return etagStringsMatch(tag1, tag2);
a9771e51 58}