Service.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2023 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 
16 Adaptation::Service::Service(const ServiceConfigPointer &aConfig): theConfig(aConfig)
17 {
18  Must(theConfig != nullptr);
19  debugs(93,3, "creating adaptation service " << cfg().key);
20 }
21 
23 {}
24 
25 void
27 {
28 }
29 
31 {
32  return probed() && !up();
33 }
34 
35 bool
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.path());
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 
AnyP::Uri url
the request URI
Definition: HttpRequest.h:115
bool wants(const ServiceFilter &filter) const
Definition: Service.cc:36
information used to search for adaptation services
Definition: ServiceFilter.h:22
virtual void finalize()
Definition: Service.cc:26
virtual bool broken() const
Definition: Service.cc:30
VectPoint point
adaptation location
Definition: ServiceFilter.h:33
HttpRequest * request
HTTP request being adapted or cause; may be nil.
Definition: ServiceFilter.h:34
ServiceConfigPointer theConfig
Definition: Service.h:65
Services & AllServices()
Definition: Service.cc:61
ServicePointer FindService(const Service::Id &key)
Definition: Service.cc:68
~Service() override
Definition: Service.cc:22
Service(const ServiceConfigPointer &aConfig)
Definition: Service.cc:16
void path(const char *p)
Definition: Uri.h:96
void DetachServices()
detach all adaptation services from current configuration
Definition: Service.cc:78
Method method
adaptation direction
Definition: ServiceFilter.h:32
#define Must(condition)
Definition: TextException.h:75
std::vector< Adaptation::ServicePointer > Services
Definition: Service.h:70
const ServiceConfig & cfg() const
Definition: Service.h:51
#define debugs(SECTION, LEVEL, CONTENT)
Definition: Stream.h:192
static AdapterServices TheServices
all loaded services
Definition: ServiceRep.cc:40

 

Introduction

Documentation

Support

Miscellaneous