Launcher.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2023 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_ICAPLAUNCHER_H
10#define SQUID_ICAPLAUNCHER_H
11
13#include "adaptation/Initiate.h"
15
16/*
17 * The ICAP Launcher starts an ICAP transaction. If the transaction fails
18 * due to what looks like a persistent connection race condition, the launcher
19 * starts a new ICAP transaction using a freshly opened connection.
20 *
21 * ICAPLauncher and one or more ICAP transactions initiated by it form an
22 * ICAP "query".
23 *
24 * An ICAP Initiator deals with the ICAP Launcher and not an individual ICAP
25 * transaction because the latter may disappear and be replaced by another
26 * transaction.
27 *
28 * Specific ICAP launchers implement the createXaction() method to create
29 * REQMOD, RESPMOD, or OPTIONS transaction from initiator-supplied data.
30 *
31 * TODO: This class might be the right place to initiate ICAP ACL checks or
32 * implement more sophisticated ICAP transaction handling like chaining of
33 * ICAP transactions.
34 */
35
36namespace Adaptation
37{
38namespace Icap
39{
40
41class Xaction;
42class XactAbortInfo;
43
44// Note: Initiate must be the first parent for cbdata to work. We use
45// a temporary InitaitorHolder/toCbdata hacks and do not call cbdata
46// operations on the initiator directly.
48{
49public:
50 Launcher(const char *aTypeName, Adaptation::ServicePointer &aService);
51 ~Launcher() override;
52
53 // Adaptation::Initiate: asynchronous communication with the initiator
54 void noteInitiatorAborted() override;
55
56 // Adaptation::Initiator: asynchronous communication with the current transaction
57 void noteAdaptationAnswer(const Answer &answer) override;
58 virtual void noteXactAbort(XactAbortInfo info);
59
60private:
61 bool canRetry(XactAbortInfo &info) const; //< true if can retry in the case of persistent connection failures
62 bool canRepeat(XactAbortInfo &info) const; //< true if can repeat in the case of no or unsatisfactory response
63
64protected:
65 // Adaptation::Initiate API implementation
66 void start() override;
67 bool doneAll() const override;
68 void swanSong() override;
69
70 // creates the right ICAP transaction using stored configuration params
71 virtual Xaction *createXaction() = 0;
72
73 void launchXaction(const char *xkind);
74
77 int theLaunches; // the number of transaction launches
78};
79
83{
84public:
85 XactAbortInfo(HttpRequest *anIcapRequest, HttpReply *anIcapReply,
86 bool beRetriable, bool beRepeatable);
89
90 std::ostream &print(std::ostream &os) const {
91 return os << isRetriable << ',' << isRepeatable;
92 }
93
98
99private:
100 XactAbortInfo &operator =(const XactAbortInfo &); // undefined
101};
102
103inline
104std::ostream &
105operator <<(std::ostream &os, const XactAbortInfo &xai)
106{
107 return xai.print(os);
108}
109
110} // namespace Icap
111} // namespace Adaptation
112
113#endif /* SQUID_ICAPLAUNCHER_H */
114
summarizes adaptation service answer for the noteAdaptationAnswer() API
Definition: Answer.h:23
Adaptation::ServicePointer theService
ICAP service for all launches.
Definition: Launcher.h:75
void noteAdaptationAnswer(const Answer &answer) override
Definition: Launcher.cc:60
bool canRepeat(XactAbortInfo &info) const
Definition: Launcher.cc:123
virtual void noteXactAbort(XactAbortInfo info)
Definition: Launcher.cc:81
CbcPointer< Initiate > theXaction
current ICAP transaction
Definition: Launcher.h:76
void noteInitiatorAborted() override
Definition: Launcher.cc:72
bool canRetry(XactAbortInfo &info) const
Definition: Launcher.cc:116
bool doneAll() const override
whether positive goal has been reached
Definition: Launcher.cc:100
virtual Xaction * createXaction()=0
void start() override
called by AsyncStart; do not call directly
Definition: Launcher.cc:35
void swanSong() override
Definition: Launcher.cc:105
void launchXaction(const char *xkind)
Definition: Launcher.cc:43
Launcher(const char *aTypeName, Adaptation::ServicePointer &aService)
Definition: Launcher.cc:22
std::ostream & print(std::ostream &os) const
Definition: Launcher.h:90
XactAbortInfo & operator=(const XactAbortInfo &)
XactAbortInfo(HttpRequest *anIcapRequest, HttpReply *anIcapReply, bool beRetriable, bool beRepeatable)
Definition: Launcher.cc:155
std::ostream & operator<<(std::ostream &os, const XactAbortInfo &xai)
Definition: Launcher.h:105

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors