]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/adaptation/AccessCheck.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / adaptation / AccessCheck.h
index 418c85b703d2d3560f6f77f3fae3b4206559642d..d6b0689d3357dbefe9a6c47531573d8374ea1007 100644 (file)
@@ -1,60 +1,77 @@
-#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 */
+