]> git.ipfire.org Git - thirdparty/squid.git/blob - src/adaptation/icap/OptXact.h
merge from trunk r14590
[thirdparty/squid.git] / src / adaptation / icap / OptXact.h
1 /*
2 * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_ICAPOPTXACT_H
10 #define SQUID_ICAPOPTXACT_H
11
12 #include "adaptation/icap/Launcher.h"
13 #include "adaptation/icap/Xaction.h"
14
15 namespace Adaptation
16 {
17 namespace Icap
18 {
19
20 /* OptXact sends an ICAP OPTIONS request to the ICAP service,
21 * parses the ICAP response, and sends it to the initiator. A NULL response
22 * means the ICAP service could not be contacted or did not return any
23 * valid response. */
24
25 class OptXact: public Xaction
26 {
27 CBDATA_CLASS(OptXact);
28
29 public:
30 OptXact(ServiceRep::Pointer &aService);
31
32 protected:
33 virtual void start();
34 virtual void handleCommConnected();
35 virtual void handleCommWrote(size_t size);
36 virtual void handleCommRead(size_t size);
37
38 void makeRequest(MemBuf &buf);
39 bool parseResponse();
40
41 void startReading();
42 virtual bool doneReading() const { return commEof || readAll; }
43
44 virtual void swanSong();
45
46 private:
47 virtual void finalizeLogInfo();
48
49 bool readAll; ///< read the entire OPTIONS response
50 };
51
52 // An Launcher that stores OptXact construction info and
53 // creates OptXact when needed
54 class OptXactLauncher: public Launcher
55 {
56 CBDATA_CLASS(OptXactLauncher);
57
58 public:
59 OptXactLauncher(Adaptation::ServicePointer aService);
60
61 protected:
62 virtual Xaction *createXaction();
63 };
64
65 } // namespace Icap
66 } // namespace Adaptation
67
68 #endif /* SQUID_ICAPOPTXACT_H */
69