MessageRep.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 /* DEBUG: section 93 eCAP Interface */
10 
11 #ifndef SQUID_SRC_ADAPTATION_ECAP_MESSAGEREP_H
12 #define SQUID_SRC_ADAPTATION_ECAP_MESSAGEREP_H
13 
14 #include "adaptation/forward.h"
15 #include "adaptation/Message.h"
16 #include "anyp/ProtocolType.h"
17 #include "BodyPipe.h"
18 #include "http/forward.h"
19 #include "HttpHeader.h"
20 
21 #if HAVE_LIBECAP_COMMON_BODY_H
22 #include <libecap/common/body.h>
23 #endif
24 #if HAVE_LIBECAP_COMMON_HEADER_H
25 #include <libecap/common/header.h>
26 #endif
27 #if HAVE_LIBECAP_COMMON_MESSAGE_H
28 #include <libecap/common/message.h>
29 #endif
30 
31 namespace Adaptation
32 {
33 namespace Ecap
34 {
35 
36 class XactionRep;
37 
38 // Translates Squid Http::Message into libecap::Header.
39 class HeaderRep: public libecap::Header
40 {
41 public:
42  typedef libecap::Name Name;
43  typedef libecap::Area Area;
44 
45 public:
46  HeaderRep(Http::Message &aMessage);
47 
48  /* libecap::Header API */
49  bool hasAny(const Name &name) const override;
50  Value value(const Name &name) const override;
51  void add(const Name &name, const Value &value) override;
52  void removeAny(const Name &name) override;
53  void visitEach(libecap::NamedValueVisitor &visitor) const override;
54  Area image() const override;
55  void parse(const Area &buf) override; // throws on failures
56 
57 protected:
58  static Http::HdrType TranslateHeaderId(const Name &name);
59 
60 private:
61  HttpHeader &theHeader; // the header being translated to libecap
62  Http::Message &theMessage; // the message being translated to libecap
63 };
64 
65 // Helps translate Squid Http::Message into libecap::FirstLine (see children).
67 {
68 public:
69  typedef libecap::Name Name;
70 
71 public:
72  FirstLineRep(Http::Message &aMessage);
73 
74  libecap::Version version() const;
75  void version(const libecap::Version &aVersion);
76  Name protocol() const;
77  void protocol(const Name &aProtocol);
78 
79 protected:
80  static AnyP::ProtocolType TranslateProtocolId(const Name &name);
81 
82 private:
83  Http::Message &theMessage; // the message which first line is being translated
84 };
85 
86 // Translates Squid HttpRequest into libecap::RequestLine.
87 class RequestLineRep: public libecap::RequestLine, public FirstLineRep
88 {
89 public:
90 // typedef libecap::Name Name;
91  typedef libecap::Area Area;
92 
93 public:
94  RequestLineRep(HttpRequest &aMessage);
95 
96  /* libecap::RequestLine API */
97  void uri(const Area &aUri) override;
98  Area uri() const override;
99  void method(const Name &aMethod) override;
100  Name method() const override;
101  libecap::Version version() const override;
102  void version(const libecap::Version &aVersion) override;
103  Name protocol() const override;
104  void protocol(const Name &aProtocol) override;
105 
106 private:
107  HttpRequest &theMessage; // the request header being translated to libecap
108 };
109 
110 // Translates Squid HttpReply into libecap::StatusLine.
111 class StatusLineRep: public libecap::StatusLine, public FirstLineRep
112 {
113 public:
114  typedef libecap::Name Name;
115  typedef libecap::Area Area;
116 
117 public:
118  StatusLineRep(HttpReply &aMessage);
119 
120  /* libecap::StatusLine API */
121  void statusCode(int code) override;
122  int statusCode() const override;
123  void reasonPhrase(const Area &phrase) override;
124  Area reasonPhrase() const override;
125  libecap::Version version() const override;
126  void version(const libecap::Version &aVersion) override;
127  Name protocol() const override;
128  void protocol(const Name &aProtocol) override;
129 
130 private:
131  HttpReply &theMessage; // the request header being translated to libecap
132 };
133 
134 // Translates Squid BodyPipe into libecap::Body.
135 class BodyRep: public libecap::Body
136 {
137 public:
138  typedef libecap::BodySize BodySize;
139 
140 public:
141  BodyRep(const BodyPipe::Pointer &aBody); // using NULL pointer? see tie()
142 
143  void tie(const BodyPipe::Pointer &aBody); // late binding if !theBody;
144 
145  // libecap::Body API
146  BodySize bodySize() const override;
147 
148 private:
149  BodyPipe::Pointer theBody; // the body being translated to libecap
150 };
151 
152 // Translates Squid Adaptation::Message into libecap::Message.
153 class MessageRep: public libecap::Message
154 {
155 public:
156  explicit MessageRep(Http::Message *rawHeader);
157  ~MessageRep() override;
158 
159  /* libecap::Message API */
160  libecap::shared_ptr<libecap::Message> clone() const override;
161  libecap::FirstLine &firstLine() override;
162  const libecap::FirstLine &firstLine() const override;
163  libecap::Header &header() override;
164  const libecap::Header &header() const override;
165  void addBody() override;
166  libecap::Body *body() override;
167  const libecap::Body *body() const override;
168 
169  void tieBody(Ecap::XactionRep *x); // to a specific transaction
170 
171  Adaptation::Message &raw() { return theMessage; } // for host access
172  const Adaptation::Message &raw() const { return theMessage; } // for host
173 
174 private:
175  Adaptation::Message theMessage; // the message being translated to libecap
176  libecap::FirstLine *theFirstLineRep; // request or status line wrapper
177  HeaderRep *theHeaderRep; // header wrapper
178  BodyRep *theBodyRep; // body wrapper
179 };
180 
181 } // namespace Ecap
182 } // namespace Adaptation
183 
184 #endif /* SQUID_SRC_ADAPTATION_ECAP_MESSAGEREP_H */
185 
libecap::Header & header() override
Definition: MessageRep.cc:416
void tie(const BodyPipe::Pointer &aBody)
Definition: MessageRep.cc:348
common parts of HttpRequest and HttpReply
Definition: Message.h:25
static Http::HdrType TranslateHeaderId(const Name &name)
Definition: MessageRep.cc:110
libecap::Version version() const override
Definition: MessageRep.cc:260
Value value(const Name &name) const override
Definition: MessageRep.cc:46
void add(const Name &name, const Value &value) override
Definition: MessageRep.cc:57
BodyPipe::Pointer theBody
Definition: MessageRep.h:149
Name method() const override
Definition: MessageRep.cc:237
libecap::FirstLine * theFirstLineRep
Definition: MessageRep.h:176
Adaptation::Message & raw()
Definition: MessageRep.h:171
HeaderRep(Http::Message &aMessage)
Definition: MessageRep.cc:31
void visitEach(libecap::NamedValueVisitor &visitor) const override
Definition: MessageRep.cc:82
StatusLineRep(HttpReply &aMessage)
Definition: MessageRep.cc:285
ProtocolType
Definition: ProtocolType.h:23
libecap::Version version() const
Definition: MessageRep.cc:124
const Adaptation::Message & raw() const
Definition: MessageRep.h:172
int statusCode() const override
Definition: MessageRep.cc:297
Http::Message & theMessage
Definition: MessageRep.h:83
Http::Message & theMessage
Definition: MessageRep.h:62
Area reasonPhrase() const override
Definition: MessageRep.cc:312
BodyRep(const BodyPipe::Pointer &aBody)
Definition: MessageRep.cc:343
libecap::Body * body() override
Definition: MessageRep.cc:428
void removeAny(const Name &name) override
Definition: MessageRep.cc:69
void parse(const Area &buf) override
Definition: MessageRep.cc:103
Area image() const override
Definition: MessageRep.cc:93
Adaptation::Message theMessage
Definition: MessageRep.h:175
int code
Definition: smb-errors.c:145
void tieBody(Ecap::XactionRep *x)
Definition: MessageRep.cc:442
Name protocol() const override
Definition: MessageRep.cc:330
Area uri() const override
Definition: MessageRep.cc:213
Name protocol() const override
Definition: MessageRep.cc:272
libecap::shared_ptr< libecap::Message > clone() const override
Definition: MessageRep.cc:390
libecap::Version version() const override
Definition: MessageRep.cc:318
libecap::BodySize BodySize
Definition: MessageRep.h:138
static AnyP::ProtocolType TranslateProtocolId(const Name &name)
Definition: MessageRep.cc:189
libecap::FirstLine & firstLine() override
Definition: MessageRep.cc:404
FirstLineRep(Http::Message &aMessage)
Definition: MessageRep.cc:119
MessageRep(Http::Message *rawHeader)
Definition: MessageRep.cc:363
BodySize bodySize() const override
Definition: MessageRep.cc:356
RequestLineRep(HttpRequest &aMessage)
Definition: MessageRep.cc:198
bool hasAny(const Name &name) const override
Definition: MessageRep.cc:37

 

Introduction

Documentation

Support

Miscellaneous