/*
- * DEBUG: section 28 Access Control
- * AUTHOR: Duane Wessels
+ * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
*
- * 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) 2003, Robert Collins <robertc@squid-cache.org>
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
*/
+/* DEBUG: section 28 Access Control */
+
#include "squid.h"
#include "acl/Checklist.h"
#include "acl/MethodData.h"
-#include "cache_cf.h"
+#include "ConfigParser.h"
#include "http/RequestMethod.h"
int ACLMethodData::ThePurgeCount = 0;
-ACLMethodData::ACLMethodData() : values (NULL)
-{}
-
-ACLMethodData::ACLMethodData(ACLMethodData const &old) : values (NULL)
+ACLMethodData::ACLMethodData(ACLMethodData const &old)
{
- assert (!old.values);
+ assert(old.values.empty());
}
ACLMethodData::~ACLMethodData()
{
- if (values)
- delete values;
+ values.clear();
}
-/// todo make this a pass-by-reference now that HTTPRequestMethods a full class?
bool
ACLMethodData::match(HttpRequestMethod toFind)
{
- return values->findAndTune(toFind);
+ for (auto i = values.begin(); i != values.end(); ++i) {
+ if (*i == toFind) {
+ // tune the list for LRU ordering
+ values.erase(i);
+ values.push_front(toFind);
+ return true;
+ }
+ }
+ return false;
}
-/* explicit instantiation required for some systems */
-
-/// \cond AUTODOCS_IGNORE
-template cbdata_type CbDataList<HttpRequestMethod>::CBDATA_CbDataList;
-/// \endcond
-
SBufList
ACLMethodData::dump() const
{
SBufList sl;
- CbDataList<HttpRequestMethod> *data = values;
-
- while (data != NULL) {
- sl.push_back(data->element.image());
- data = data->next;
+ for (std::list<HttpRequestMethod>::const_iterator i = values.begin(); i != values.end(); ++i) {
+ sl.push_back((*i).image());
}
return sl;
void
ACLMethodData::parse()
{
- CbDataList<HttpRequestMethod> **Tail;
- char *t = NULL;
-
- for (Tail = &values; *Tail; Tail = &((*Tail)->next));
- while ((t = strtokFile())) {
- CbDataList<HttpRequestMethod> *q = new CbDataList<HttpRequestMethod> (HttpRequestMethod(t));
- if (q->element == Http::METHOD_PURGE)
+ while (char *t = ConfigParser::strtokFile()) {
+ HttpRequestMethod m;
+ m.HttpRequestMethodXXX(t);
+ values.push_back(m);
+ if (values.back() == Http::METHOD_PURGE)
++ThePurgeCount; // configuration code wants to know
- *(Tail) = q;
- Tail = &q->next;
}
}
-bool
-ACLMethodData::empty() const
-{
- return values == NULL;
-}
-
ACLData<HttpRequestMethod> *
ACLMethodData::clone() const
{
- assert (!values);
+ assert(values.empty());
return new ACLMethodData(*this);
}
+