Squid Web Cache master
Loading...
Searching...
No Matches
Service.cc
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2025 The Squid Software Foundation and contributors
3 *
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.
7 */
8
9/* DEBUG: section 93 Adaptation */
10
11#include "squid.h"
12#include "adaptation/Service.h"
14#include "HttpRequest.h"
15
16Adaptation::Service::Service(const ServiceConfigPointer &aConfig): theConfig(aConfig)
17{
18 Must(theConfig != nullptr);
19 debugs(93,3, "creating adaptation service " << cfg().key);
20}
21
24
25void
29
31{
32 return probed() && !up();
33}
34
35bool
37{
38 if (cfg().method != filter.method)
39 return false;
40
41 if (cfg().point != filter.point)
42 return false;
43
44 // sending a message to a broken service is likely to cause errors
45 if (cfg().bypass && broken())
46 return false;
47
48 if (up()) {
49 // Sending a message to a service that does not want it is useless.
50 // note that we cannot check wantsUrl for service that is not "up"
51 // note that even essential services are skipped on unwanted URLs!
52 return wantsUrl(filter.request->url.absolutePath());
53 }
54
55 // The service is down and is either not bypassable or not probed due
56 // to the bypass && broken() test above. Thus, we want to use it!
57 return true;
58}
59
62{
63 static Services *TheServices = new Services;
64 return *TheServices;
65}
66
69{
70 typedef Services::iterator SI;
71 for (SI i = AllServices().begin(); i != AllServices().end(); ++i) {
72 if ((*i)->cfg().key == key)
73 return *i;
74 }
75 return nullptr;
76}
77
79{
80 while (!AllServices().empty()) {
81 AllServices().back()->detach();
82 AllServices().pop_back();
83 }
84}
85
#define Must(condition)
information used to search for adaptation services
Method method
adaptation direction
VectPoint point
adaptation location
HttpRequest * request
HTTP request being adapted or cause; may be nil.
ServiceConfigPointer theConfig
Definition Service.h:65
virtual bool broken() const
Definition Service.cc:30
bool wants(const ServiceFilter &filter) const
Definition Service.cc:36
virtual void detach()=0
const ServiceConfig & cfg() const
Definition Service.h:51
~Service() override
Definition Service.cc:22
Service(const ServiceConfigPointer &aConfig)
Definition Service.cc:16
virtual void finalize()
Definition Service.cc:26
SBuf & absolutePath() const
RFC 3986 section 4.2 relative reference called 'absolute-path'.
Definition Uri.cc:775
AnyP::Uri url
the request URI
#define debugs(SECTION, LEVEL, CONTENT)
Definition Stream.h:192
static AdapterServices TheServices
all loaded services
Definition ServiceRep.cc:40
Services & AllServices()
Definition Service.cc:61
std::vector< Adaptation::ServicePointer > Services
Definition Service.h:70
void DetachServices()
detach all adaptation services from current configuration
Definition Service.cc:78
ServicePointer FindService(const Service::Id &key)
Definition Service.cc:68