]> git.ipfire.org Git - thirdparty/squid.git/blob - src/adaptation/Initiate.cc
Merged from parent (trunk r11379, v3.2.0.6+).
[thirdparty/squid.git] / src / adaptation / Initiate.cc
1 /*
2 * DEBUG: section 93 ICAP (RFC 3507) Client
3 */
4
5 #include "squid.h"
6 #include "HttpMsg.h"
7 #include "adaptation/Answer.h"
8 #include "adaptation/Initiator.h"
9 #include "adaptation/Initiate.h"
10 #include "base/AsyncJobCalls.h"
11
12
13 Adaptation::Initiate::Initiate(const char *aTypeName): AsyncJob(aTypeName)
14 {
15 }
16
17 Adaptation::Initiate::~Initiate()
18 {
19 // TODO: we cannot assert(!theInitiator) because that fails if a child
20 // constructor fails. AsyncJob should have wasStarted flag so that we
21 // can assert(!(wasStarted && theInitiator)).
22 }
23
24 void
25 Adaptation::Initiate::initiator(const CbcPointer<Initiator> &i)
26 {
27 Must(!theInitiator);
28 Must(i.valid());
29 theInitiator = i;
30 }
31
32
33 // internal cleanup
34 void Adaptation::Initiate::swanSong()
35 {
36 debugs(93, 5, HERE << "swan sings" << status());
37
38 if (theInitiator.set()) {
39 debugs(93, 3, HERE << "fatal failure; sending abort notification");
40 tellQueryAborted(true); // final by default
41 }
42
43 debugs(93, 5, HERE << "swan sang" << status());
44 }
45
46 void Adaptation::Initiate::clearInitiator()
47 {
48 theInitiator.clear();
49 }
50
51 void Adaptation::Initiate::sendAnswer(const Answer &answer)
52 {
53 typedef UnaryMemFunT<Initiator, Answer, const Answer &> MyDialer;
54 CallJob(93, 5, __FILE__, __LINE__, "Initiator::noteAdaptationAnswer",
55 MyDialer(theInitiator, &Initiator::noteAdaptationAnswer, answer));
56 clearInitiator();
57 }
58
59
60 void Adaptation::Initiate::tellQueryAborted(bool final)
61 {
62 sendAnswer(Answer::Error(final));
63 }
64
65 const char *Adaptation::Initiate::status() const
66 {
67 return AsyncJob::status(); // for now
68 }