2 * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
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.
9 /* DEBUG: section 93 eCAP Interface */
11 #ifndef SQUID_SRC_ADAPTATION_ECAP_XACTIONREP_H
12 #define SQUID_SRC_ADAPTATION_ECAP_XACTIONREP_H
14 #include "adaptation/ecap/MessageRep.h"
15 #include "adaptation/ecap/ServiceRep.h"
16 #include "adaptation/Initiate.h"
17 #include "adaptation/Message.h"
19 #include <libecap/common/forward.h>
20 #include <libecap/common/memory.h>
21 #include <libecap/host/xaction.h>
22 #include <libecap/adapter/xaction.h>
29 /* The eCAP xaction representative maintains information about a single eCAP
30 xaction that Squid communicates with. One eCAP module may register many
32 class XactionRep
: public Adaptation::Initiate
, public libecap::host::Xaction
,
33 public BodyConsumer
, public BodyProducer
35 CBDATA_CHILD(XactionRep
);
38 XactionRep(Http::Message
*virginHeader
, HttpRequest
*virginCause
, AccessLogEntry::Pointer
&alp
, const Adaptation::ServicePointer
&service
);
39 ~XactionRep() override
;
41 typedef libecap::shared_ptr
<libecap::adapter::Xaction
> AdapterXaction
;
42 void master(const AdapterXaction
&aMaster
); // establish a link
44 // libecap::host::Xaction API
45 const libecap::Area
option(const libecap::Name
&name
) const override
;
46 void visitEachOption(libecap::NamedValueVisitor
&visitor
) const override
;
47 libecap::Message
&virgin() override
;
48 const libecap::Message
&cause() override
;
49 libecap::Message
&adapted() override
;
50 void useVirgin() override
;
51 void useAdapted(const libecap::shared_ptr
<libecap::Message
> &msg
) override
;
52 void blockVirgin() override
;
53 void adaptationDelayed(const libecap::Delay
&) override
;
54 void adaptationAborted() override
;
55 void resume() override
;
56 void vbDiscard() override
;
57 void vbMake() override
;
58 void vbStopMaking() override
;
59 void vbMakeMore() override
;
60 libecap::Area
vbContent(libecap::size_type offset
, libecap::size_type size
) override
;
61 void vbContentShift(libecap::size_type size
) override
;
62 void noteAbContentDone(bool atEnd
) override
;
63 void noteAbContentAvailable() override
;
66 void noteMoreBodySpaceAvailable(RefCount
<BodyPipe
> bp
) override
;
67 void noteBodyConsumerAborted(RefCount
<BodyPipe
> bp
) override
;
70 void noteMoreBodyDataAvailable(RefCount
<BodyPipe
> bp
) override
;
71 void noteBodyProductionEnded(RefCount
<BodyPipe
> bp
) override
;
72 void noteBodyProducerAborted(RefCount
<BodyPipe
> bp
) override
;
75 void noteInitiatorAborted() override
;
77 // AsyncJob API (via Initiate)
78 void start() override
;
79 bool doneAll() const override
;
80 void swanSong() override
;
81 const char *status() const override
;
86 Adaptation::Message
&answer();
88 void sinkVb(const char *reason
);
89 void preserveVb(const char *reason
);
90 void forgetVb(const char *reason
);
94 void updateHistory(Http::Message
*adapted
);
95 void terminateMaster();
96 void scheduleStop(const char *reason
);
97 void updateSources(Http::Message
*adapted
);
99 const libecap::Area
clientIpValue() const;
100 const libecap::Area
usernameValue() const;
101 const libecap::Area
masterxSharedValue(const libecap::Name
&name
) const;
102 /// Return the adaptation meta header value for the given header "name"
103 const libecap::Area
metaValue(const libecap::Name
&name
) const;
104 /// Return the adaptation meta headers and their values
105 void visitEachMetaHeader(libecap::NamedValueVisitor
&visitor
) const;
110 AdapterXaction theMaster
; // the actual adaptation xaction we represent
111 Adaptation::ServicePointer theService
; ///< xaction's adaptation service
113 MessageRep theVirginRep
;
114 MessageRep
*theCauseRep
;
116 typedef libecap::shared_ptr
<libecap::Message
> MessagePtr
;
117 MessagePtr theAnswerRep
;
119 typedef enum { opUndecided
, opOn
, opComplete
, opNever
} OperationState
;
120 OperationState makingVb
; //< delivering virgin body from pipe to adapter
121 OperationState proxyingAb
; // delivering adapted body from adapter to core
122 int adaptHistoryId
; ///< adaptation history slot reservation
123 bool vbProductionFinished
; // whether there can be no more vb bytes
124 bool abProductionFinished
; // whether adapter has finished producing ab
125 bool abProductionAtEnd
; // whether adapter produced a complete ab
126 AccessLogEntry::Pointer al
; ///< Master transaction AccessLogEntry
130 } // namespace Adaptation
132 #endif /* SQUID_SRC_ADAPTATION_ECAP_XACTIONREP_H */