-#ifndef SQUID_ADAPTATION__ACCESS_H
-#define SQUID_ADAPTATION__ACCESS_H
+/*
+ * Copyright (C) 1996-2015 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.
+ */
-#include "ICAP/AsyncJob.h"
+#ifndef SQUID_ADAPTATION__ACCESS_CHECK_H
+#define SQUID_ADAPTATION__ACCESS_CHECK_H
+
+#include "AccessLogEntry.h"
+#include "acl/Acl.h"
#include "adaptation/Elements.h"
#include "adaptation/forward.h"
+#include "adaptation/Initiator.h"
+#include "adaptation/ServiceFilter.h"
+#include "base/AsyncJob.h"
class HttpRequest;
class HttpReply;
+class ACLFilledChecklist;
-namespace Adaptation {
+namespace Adaptation
+{
class AccessRule;
// checks adaptation_access rules to find a matching adaptation service
class AccessCheck: public virtual AsyncJob
{
+ CBDATA_CLASS(AccessCheck);
public:
- typedef void AccessCheckCallback(ServicePointer match, void *data);
- AccessCheck(Method, VectPoint, HttpRequest *, HttpReply *, AccessCheckCallback *, void *);
+ typedef void AccessCheckCallback(ServiceGroupPointer group, void *data);
+
+ // use this to start async ACL checks; returns true if started
+ static bool Start(Method method, VectPoint vp, HttpRequest *req,
+ HttpReply *rep, AccessLogEntry::Pointer &al, Adaptation::Initiator *initiator);
+
+protected:
+ // use Start to start adaptation checks
+ AccessCheck(const ServiceFilter &aFilter, Adaptation::Initiator *);
~AccessCheck();
private:
- Method method;
- VectPoint point;
- HttpRequest *req;
- HttpReply *rep;
- AccessCheckCallback *callback;
- void *callback_data;
- ACLChecklist *acl_checklist;
+ const ServiceFilter filter;
+ CbcPointer<Adaptation::Initiator> theInitiator; ///< the job which ordered this access check
+ ACLFilledChecklist *acl_checklist;
typedef int Candidate;
- typedef Vector<Candidate> Candidates;
+ typedef std::vector<Candidate> Candidates;
Candidates candidates;
- Candidate topCandidate() { return *candidates.begin(); }
+ Candidate topCandidate() const { return *candidates.begin(); }
+ ServiceGroupPointer topGroup() const; // may return nil
- void do_callback();
- ServicePointer findBestService(AccessRule &r, bool preferUp);
- bool done;
+ void callBack(const ServiceGroupPointer &g);
+ bool isCandidate(AccessRule &r);
public:
- void check();
void checkCandidates();
- static void AccessCheckCallbackWrapper(int, void*);
-#if 0
- static EVH AccessCheckCallbackEvent;
-#endif
- void noteAnswer(int answer);
+ static void AccessCheckCallbackWrapper(allow_t, void*);
+ void noteAnswer(allow_t answer);
-//AsyncJob virtual methods
- virtual bool doneAll() const { return AsyncJob::doneAll() && done;}
+protected:
+ // AsyncJob API
+ virtual void start();
+ virtual bool doneAll() const { return false; } /// not done until mustStop
-private:
- CBDATA_CLASS2(AccessCheck);
+ bool usedDynamicRules();
+ void check();
};
} // namespace Adaptation
-#endif /* SQUID_ADAPTATION__ACCESS_H */
+#endif /* SQUID_ADAPTATION__ACCESS_CHECK_H */
+