]>
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;
52 Adaptation::Config::parseService()
54 ServiceConfig
*cfg
= new ServiceConfig
;
56 fatalf("%s:%d: malformed adaptation service configuration",
57 cfg_filename
, config_lineno
);
59 serviceConfigs
.push_back(cfg
);
63 Adaptation::Config::freeService()
65 while (!serviceConfigs
.empty()) {
66 delete serviceConfigs
.back();
67 serviceConfigs
.pop_back();
72 Adaptation::Config::dumpService(StoreEntry
*entry
, const char *name
) const
74 typedef Services::iterator SCI
;
75 for (SCI i
= AllServices().begin(); i
!= AllServices().end(); ++i
) {
76 const ServiceConfig
&cfg
= (*i
)->cfg();
77 storeAppendPrintf(entry
, "%s " SQUIDSTRINGPH
"_%s %s %d " SQUIDSTRINGPH
"\n",
79 SQUIDSTRINGPRINT(cfg
.key
),
80 cfg
.methodStr(), cfg
.vectPointStr(), cfg
.bypass
,
81 SQUIDSTRINGPRINT(cfg
.uri
));
86 Adaptation::Config::finalize()
88 // create service reps from service configs
89 typedef Vector
<ServiceConfig
*>::const_iterator VISCI
;
90 const Vector
<ServiceConfig
*> &configs
= serviceConfigs
;
91 debugs(93,3, HERE
<< "Found " << configs
.size() << " service configs.");
92 for (VISCI i
= configs
.begin(); i
!= configs
.end(); ++i
) {
93 const ServiceConfig
&cfg
= **i
;
94 if (FindService(cfg
.key
) != NULL
) {
95 debugs(93,0, "ERROR: Duplicate adaptation service name: " <<
97 continue; // TODO: make fatal
99 ServicePointer s
= createService(**i
);
101 AllServices().push_back(s
);
104 debugs(93,3, HERE
<< "Created " << configs
.size() <<
105 " message adaptation services.");
109 template <class Collection
>
111 FinalizeEach(Collection
&collection
, const char *label
)
113 typedef typename
Collection::iterator CI
;
114 for (CI i
= collection
.begin(); i
!= collection
.end(); ++i
)
117 debugs(93,2, HERE
<< "Initialized " << collection
.size() << ' ' << label
);
121 Adaptation::Config::Finalize(bool enabled
)
124 debugs(93,1, "Adaptation support is " << (Enabled
? "on" : "off."));
126 FinalizeEach(AllServices(), "message adaptation services");
127 FinalizeEach(AllGroups(), "message adaptation service groups");
128 FinalizeEach(AllRules(), "message adaptation access rules");
132 Adaptation::Config::ParseServiceSet()
134 Adaptation::Config::ParseServiceGroup(new ServiceSet
);
138 Adaptation::Config::ParseServiceChain()
140 Adaptation::Config::ParseServiceGroup(new ServiceChain
);
144 Adaptation::Config::ParseServiceGroup(ServiceGroupPointer g
)
148 AllGroups().push_back(g
);
152 Adaptation::Config::FreeServiceGroups()
154 while (!AllGroups().empty()) {
155 // groups are refcounted so we do not explicitly delete them
156 AllGroups().pop_back();
161 Adaptation::Config::DumpServiceGroups(StoreEntry
*entry
, const char *name
)
163 typedef Groups::iterator GI
;
164 for (GI i
= AllGroups().begin(); i
!= AllGroups().end(); ++i
)
165 storeAppendPrintf(entry
, "%s " SQUIDSTRINGPH
"\n", name
, SQUIDSTRINGPRINT((*i
)->id
));
169 Adaptation::Config::ParseAccess(ConfigParser
&parser
)
172 ConfigParser::ParseString(&groupId
);
174 if (!(r
=FindRuleByGroupId(groupId
))) {
175 r
= new AccessRule(groupId
);
176 AllRules().push_back(r
);
182 Adaptation::Config::FreeAccess()
184 while (!AllRules().empty()) {
185 delete AllRules().back();
186 AllRules().pop_back();
191 Adaptation::Config::DumpAccess(StoreEntry
*entry
, const char *name
)
193 LOCAL_ARRAY(char, nom
, 64);
195 typedef AccessRules::iterator CI
;
196 for (CI i
= AllRules().begin(); i
!= AllRules().end(); ++i
) {
197 snprintf(nom
, 64, "%s " SQUIDSTRINGPH
, name
, SQUIDSTRINGPRINT((*i
)->groupId
));
198 dump_acl_access(entry
, nom
, (*i
)->acl
);
202 Adaptation::Config::Config()
204 // XXX: should we init members?
207 // XXX: this is called for ICAP and eCAP configs, but deals mostly
208 // with global arrays shared by those individual configs
209 Adaptation::Config::~Config()
214 // invalidate each service so that it can be deleted when refcount=0
215 while (!AllServices().empty()) {
216 AllServices().back()->invalidate();
217 AllServices().pop_back();