1 /*
2  * Copyright (C) 1996-2021 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_ADAPTATION__ANSWER_H
10 #define SQUID_ADAPTATION__ANSWER_H
11 
12 #include "adaptation/forward.h"
13 #include "HttpMsg.h"
14 
15 #include <iosfwd>
16 
17 namespace Adaptation
18 {
19 
20 /// summarizes adaptation service answer for the noteAdaptationAnswer() API
21 class Answer
22 {
23 public:
24     /// helps interpret other members without a class hierarchy
25     typedef enum {
26         akForward, ///< forward the supplied adapted HTTP message
27         akBlock, ///< block or deny the master xaction; see authority
28         akError, ///< no adapted message will come; see bypassable
29     } Kind;
30 
31     static Answer Error(bool final); ///< create an akError answer
32     static Answer Forward(HttpMsg *aMsg); ///< create an akForward answer
33     static Answer Block(const String &aRule); ///< create an akBlock answer
34 
35     std::ostream &print(std::ostream &os) const;
36 
37 public:
38     HttpMsg::Pointer message; ///< HTTP request or response to forward
39     String ruleId; ///< ACL (or similar rule) name that blocked forwarding
40     bool final; ///< whether the error, if any, cannot be bypassed
41     Kind kind; ///< the type of the answer
42 
43 private:
44     explicit Answer(Kind aKind); ///< use static creators instead
45 };
46 
47 inline
48 std::ostream &operator <<(std::ostream &os, const Answer &answer)
49 {
50     return answer.print(os);
51 }
52 
53 } // namespace Adaptation
54 
55 #endif /* SQUID_ADAPTATION__ANSWER_H */
56 
57