+/*
+ * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
#ifndef SQUID_ADAPTATION__CONFIG_H
#define SQUID_ADAPTATION__CONFIG_H
-#include "event.h"
-#include "base/AsyncCall.h"
-#include "adaptation/forward.h"
+#include "acl/forward.h"
#include "adaptation/Elements.h"
+#include "adaptation/forward.h"
+#include "base/AsyncCall.h"
+#include "event.h"
+#include "Notes.h"
+#include "SquidString.h"
-class acl_access;
class ConfigParser;
+class HttpRequest;
+class HttpReply;
namespace Adaptation
{
// these are global squid.conf options, documented elsewhere
static char *masterx_shared_name; // global TODO: do we need TheConfig?
static int service_iteration_limit;
+ static int send_client_ip;
+ static int send_username;
+ static int use_indirect_client;
+
// Options below are accessed via Icap::TheConfig or Ecap::TheConfig
// TODO: move ICAP-specific options to Icap::Config and add TheConfig
int onoff;
- int send_client_ip;
- int send_client_username;
int service_failure_limit;
time_t oldest_service_failure;
int service_revival_delay;
- int icap_uses_indirect_client;
- Vector<ServiceConfig*> serviceConfigs;
+ static Notes metaHeaders; ///< The list of configured meta headers
+
+ static bool needHistory; ///< HttpRequest adaptation history should recorded
+
+ typedef std::vector<ServiceConfigPointer> ServiceConfigs;
+ ServiceConfigs serviceConfigs;
Config();
virtual ~Config();
void parseService(void);
void freeService(void);
void dumpService(StoreEntry *, const char *) const;
- ServicePointer findService(const String&);
+ ServiceConfigPointer findServiceConfig(const String&);
+
+ /**
+ * Creates and starts the adaptation services. In the case the adaptation
+ * mechanism is disabled then removes any reference to the services from
+ * access rules and service groups, and returns false.
+ * \return true if the services are ready and running, false otherwise
+ */
+ virtual bool finalize();
+
+protected:
+ /// Removes any reference to the services from configuration
+ virtual void clear();
- virtual void finalize();
+ /// creates service configuration object that will parse and keep cfg info
+ virtual ServiceConfig *newServiceConfig() const;
+
+ /// Removes the given service from all service groups.
+ void removeService(const String& service);
+
+ /// Removes access rules of the given service or group
+ void removeRule(const String& id);
private:
Config(const Config &); // unsupported
Config &operator =(const Config &); // unsupported
- virtual ServicePointer createService(const ServiceConfig &cfg) = 0;
+ virtual ServicePointer createService(const ServiceConfigPointer &cfg) = 0;
static void ParseServiceGroup(ServiceGroupPointer group);
static void FreeServiceGroups(void);
} // namespace Adaptation
#endif /* SQUID_ADAPTATION__CONFIG_H */
+