]> git.ipfire.org Git - thirdparty/squid.git/blame - src/adaptation/Initiate.h
SourceFormat Enforcement
[thirdparty/squid.git] / src / adaptation / Initiate.h
CommitLineData
2e4a5466
AR
1#ifndef SQUID_ADAPTATION__INITIATE_H
2#define SQUID_ADAPTATION__INITIATE_H
3
602d9612 4#include "adaptation/forward.h"
d1e045c3 5#include "base/AsyncJob.h"
4299f876 6#include "base/CbcPointer.h"
2e4a5466 7
26ac0430
AJ
8namespace Adaptation
9{
2e4a5466 10
2e4a5466
AR
11/*
12 * The Initiate is a common base for queries or transactions
26ac0430 13 * initiated by an Initiator. This interface exists to allow an
2e4a5466
AR
14 * initiator to signal its "initiatees" that it is aborting and no longer
15 * expecting an answer. The class is also handy for implementing common
16 * initiate actions such as maintaining and notifying the initiator.
17 *
18 * Initiate implementations must cbdata-protect themselves.
19 *
20 * This class could have been named Initiatee.
21 */
22class Initiate: virtual public AsyncJob
23{
24
25public:
4299f876 26 Initiate(const char *aTypeName);
2e4a5466
AR
27 virtual ~Initiate();
28
4299f876
AR
29 void initiator(const CbcPointer<Initiator> &i); ///< sets initiator
30
2e4a5466
AR
31 // communication with the initiator
32 virtual void noteInitiatorAborted() = 0;
33
34protected:
3af10ac0 35 void sendAnswer(const Answer &answer); // send to the initiator
2e4a5466
AR
36 void tellQueryAborted(bool final); // tell initiator
37 void clearInitiator(); // used by noteInitiatorAborted; TODO: make private
38
39 virtual void swanSong(); // internal cleanup
40
41 virtual const char *status() const; // for debugging
42
4299f876 43 CbcPointer<Initiator> theInitiator;
3ff65596
AR
44
45private:
46 Initiate(const Initiate &); // no definition
47 Initiate &operator =(const Initiate &); // no definition
2e4a5466
AR
48};
49
50} // namespace Adaptation
51
52#endif /* SQUID_ADAPTATION__INITIATE_H */