]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/adaptation/Config.cc
5 * SQUID Web Proxy Cache http://www.squid-cache.org/
6 * ----------------------------------------------------------
8 * Squid is the result of efforts by numerous individuals from
9 * the Internet community; see the CONTRIBUTORS file for full
10 * details. Many organizations have provided support for Squid's
11 * development; see the SPONSORS file for full details. Squid is
12 * Copyrighted (C) 2001 by the Regents of the University of
13 * California; see the COPYRIGHT file for full details. Squid
14 * incorporates software developed and/or copyrighted by other
15 * sources; see the CREDITS file for full details.
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
36 #include "ConfigParser.h"
37 #include "acl/Gadgets.h"
39 #include "Array.h" // really Vector
40 #include "adaptation/Config.h"
41 #include "adaptation/Service.h"
42 #include "adaptation/AccessRule.h"
43 #include "adaptation/ServiceGroups.h"
44 #include "adaptation/History.h"
47 bool Adaptation::Config::Enabled
= false;
48 char *Adaptation::Config::masterx_shared_name
= NULL
;
49 int Adaptation::Config::service_iteration_limit
= 16;
50 int Adaptation::Config::send_client_ip
= false;
51 int Adaptation::Config::send_username
= false;
52 int Adaptation::Config::use_indirect_client
= true;
55 Adaptation::ServiceConfig
*
56 Adaptation::Config::newServiceConfig() const
58 return new ServiceConfig();
62 Adaptation::Config::parseService()
64 ServiceConfigPointer cfg
= newServiceConfig();
66 fatalf("%s:%d: malformed adaptation service configuration",
67 cfg_filename
, config_lineno
);
69 serviceConfigs
.push_back(cfg
);
73 Adaptation::Config::freeService()
80 serviceConfigs
.clean();
84 Adaptation::Config::dumpService(StoreEntry
*entry
, const char *name
) const
86 typedef Services::iterator SCI
;
87 for (SCI i
= AllServices().begin(); i
!= AllServices().end(); ++i
) {
88 const ServiceConfig
&cfg
= (*i
)->cfg();
89 storeAppendPrintf(entry
, "%s " SQUIDSTRINGPH
"_%s %s %d " SQUIDSTRINGPH
"\n",
91 SQUIDSTRINGPRINT(cfg
.key
),
92 cfg
.methodStr(), cfg
.vectPointStr(), cfg
.bypass
,
93 SQUIDSTRINGPRINT(cfg
.uri
));
98 Adaptation::Config::finalize()
100 // create service reps from service configs
103 typedef ServiceConfigs::const_iterator VISCI
;
104 const ServiceConfigs
&configs
= serviceConfigs
;
105 for (VISCI i
= configs
.begin(); i
!= configs
.end(); ++i
) {
106 const ServiceConfigPointer cfg
= *i
;
107 if (FindService(cfg
->key
) != NULL
) {
108 debugs(93,0, "ERROR: Duplicate adaptation service name: " <<
110 continue; // TODO: make fatal
112 ServicePointer s
= createService(cfg
);
114 AllServices().push_back(s
);
119 debugs(93,3, HERE
<< "Created " << created
<< " adaptation services");
121 // services remember their configs; we do not have to
122 serviceConfigs
.clean();
126 template <class Collection
>
128 FinalizeEach(Collection
&collection
, const char *label
)
130 typedef typename
Collection::iterator CI
;
131 for (CI i
= collection
.begin(); i
!= collection
.end(); ++i
)
134 debugs(93,2, HERE
<< "Initialized " << collection
.size() << ' ' << label
);
138 Adaptation::Config::Finalize(bool enabled
)
141 debugs(93,1, "Adaptation support is " << (Enabled
? "on" : "off."));
143 FinalizeEach(AllServices(), "message adaptation services");
144 FinalizeEach(AllGroups(), "message adaptation service groups");
145 FinalizeEach(AllRules(), "message adaptation access rules");
149 Adaptation::Config::ParseServiceSet()
151 Adaptation::Config::ParseServiceGroup(new ServiceSet
);
155 Adaptation::Config::ParseServiceChain()
157 Adaptation::Config::ParseServiceGroup(new ServiceChain
);
161 Adaptation::Config::ParseServiceGroup(ServiceGroupPointer g
)
165 AllGroups().push_back(g
);
169 Adaptation::Config::FreeServiceGroups()
171 while (!AllGroups().empty()) {
172 // groups are refcounted so we do not explicitly delete them
173 AllGroups().pop_back();
178 Adaptation::Config::DumpServiceGroups(StoreEntry
*entry
, const char *name
)
180 typedef Groups::iterator GI
;
181 for (GI i
= AllGroups().begin(); i
!= AllGroups().end(); ++i
)
182 storeAppendPrintf(entry
, "%s " SQUIDSTRINGPH
"\n", name
, SQUIDSTRINGPRINT((*i
)->id
));
186 Adaptation::Config::ParseAccess(ConfigParser
&parser
)
189 ConfigParser::ParseString(&groupId
);
191 if (!(r
=FindRuleByGroupId(groupId
))) {
192 r
= new AccessRule(groupId
);
193 AllRules().push_back(r
);
199 Adaptation::Config::FreeAccess()
201 while (!AllRules().empty()) {
202 delete AllRules().back();
203 AllRules().pop_back();
208 Adaptation::Config::DumpAccess(StoreEntry
*entry
, const char *name
)
210 LOCAL_ARRAY(char, nom
, 64);
212 typedef AccessRules::iterator CI
;
213 for (CI i
= AllRules().begin(); i
!= AllRules().end(); ++i
) {
214 snprintf(nom
, 64, "%s " SQUIDSTRINGPH
, name
, SQUIDSTRINGPRINT((*i
)->groupId
));
215 dump_acl_access(entry
, nom
, (*i
)->acl
);
219 Adaptation::Config::Config()
221 // XXX: should we init members?
224 // XXX: this is called for ICAP and eCAP configs, but deals mostly
225 // with global arrays shared by those individual configs
226 Adaptation::Config::~Config()