-
/*
- * $Id: HttpHdrScTarget.cc,v 1.1 2003/03/10 04:56:36 robertc Exp $
- *
- * DEBUG: section 90 HTTP Cache Control Header
- * AUTHOR: Alex Rousskov
- * Robert Collins (Surrogate-Control is derived from
- * Cache-Control).
- *
- * SQUID Web Proxy Cache http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- * Squid is the result of efforts by numerous individuals from
- * the Internet community; see the CONTRIBUTORS file for full
- * details. Many organizations have provided support for Squid's
- * development; see the SPONSORS file for full details. Squid is
- * Copyrighted (C) 2001 by the Regents of the University of
- * California; see the COPYRIGHT file for full details. Squid
- * incorporates software developed and/or copyrighted by other
- * sources; see the CREDITS file for full details.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
*
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
*/
-#include "squid.h"
-
-/* local prototypes */
-
-/* module initialization */
-
-/* implementation */
-
-HttpHdrScTarget *
-httpHdrScTargetCreate(char const *target)
-{
- HttpHdrScTarget *sc = (HttpHdrScTarget *)memAllocate(MEM_HTTP_HDR_SCTARGET);
- sc->max_age = -1;
- /* max_stale is specified as 0 if not specified in the header */
- sc->target = target;
- return sc;
-}
-
-void
-httpHdrScTargetDestroy(HttpHdrScTarget * sc)
-{
- assert(sc);
- sc->target.clean();
- sc->content.clean();
- memFree(sc, MEM_HTTP_HDR_SCTARGET);
-}
-
-HttpHdrScTarget *
-httpHdrScTargetDup(const HttpHdrScTarget * sc)
-{
- HttpHdrScTarget *dup;
- assert(sc);
- dup = httpHdrScTargetCreate(sc->target.buf());
- dup->mask = sc->mask;
- dup->max_age = sc->max_age;
- dup->content = sc->content;
- return dup;
-}
-
-/* union of two targets */
-void
-httpHdrScTargetJoinWith(HttpHdrScTarget * sc, const HttpHdrScTarget * new_sc)
-{
- assert(sc && new_sc);
- /* TODO: check both targets are the same */
+/* DEBUG: section 90 HTTP Cache Control Header */
- if (sc->max_age < 0)
- sc->max_age = new_sc->max_age;
-
- if (sc->max_stale < new_sc->max_stale)
- sc->max_stale = new_sc->max_stale;
-
- /* RC TODO: copy unique missing content stringlist entries */
- sc->mask |= new_sc->mask;
-}
+#include "squid.h"
+#include "HttpHdrScTarget.h"
+#include "StatHist.h"
-extern http_hdr_sc_type &operator++ (http_hdr_sc_type &aHeader);
-extern int operator - (http_hdr_sc_type const &anSc, http_hdr_sc_type const &anSc2);
+http_hdr_sc_type &operator++ (http_hdr_sc_type &aHeader);
/* copies non-extant fields from new_sc to this sc */
void
-httpHdrScTargetMergeWith(HttpHdrScTarget * sc, const HttpHdrScTarget * new_sc)
+HttpHdrScTarget::mergeWith(const HttpHdrScTarget * new_sc)
{
- http_hdr_sc_type c;
- assert(sc && new_sc);
+ assert(new_sc);
/* Don't touch the target - this is used to get the operations for a
* single surrogate
*/
- for (c = SC_NO_STORE; c < SC_ENUM_END; ++c)
- if (!EBIT_TEST(sc->mask, c) && EBIT_TEST(new_sc->mask,c)) {
- EBIT_SET(sc->mask, c);
-
- switch (c) {
-
- case SC_MAX_AGE:
- sc->max_age = new_sc->max_age;
- sc->max_stale = new_sc->max_stale;
- break;
+ if (new_sc->hasNoStore())
+ noStore(true);
- case SC_CONTENT:
- assert (sc->content.size() == 0);
- sc->content = new_sc->content;
- break;
+ if (new_sc->hasNoStoreRemote())
+ noStoreRemote(true);
- default:
- break;
- }
- }
-}
+ if (new_sc->hasMaxAge() && !hasMaxAge()) {
+ maxAge(new_sc->maxAge());
+ maxStale(new_sc->maxStale());
+ }
-/* negative max_age will clean old max_Age setting */
-void
-httpHdrScTargetSetMaxAge(HttpHdrScTarget * sc, int max_age)
-{
- assert(sc);
- sc->max_age = max_age;
+ if (new_sc->hasContent() && !hasContent())
+ Content(new_sc->content());
- if (max_age >= 0)
- EBIT_SET(sc->mask, SC_MAX_AGE);
- else
- EBIT_CLR(sc->mask, SC_MAX_AGE);
}
void
-httpHdrScTargetUpdateStats(const HttpHdrScTarget * sc, StatHist * hist)
+HttpHdrScTarget::updateStats(StatHist * hist) const
{
http_hdr_sc_type c;
- assert(sc);
for (c = SC_NO_STORE; c < SC_ENUM_END; ++c)
- if (EBIT_TEST(sc->mask, c))
- statHistCount(hist, c);
+ if (isSet(c))
+ hist->count(c);
}
+