Message.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2017 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_HTTP_MESSAGE_H
10 #define SQUID_HTTP_MESSAGE_H
11 
12 #include "base/Lock.h"
13 #include "BodyPipe.h"
14 #include "enums.h"
15 #include "http/forward.h"
16 #include "http/ProtocolVersion.h"
17 #include "http/StatusCode.h"
18 #include "HttpHeader.h"
19 
20 namespace Http
21 {
22 
24 class Message : public RefCountable
25 {
26 public:
28  enum Sources {
30 
31  /* flags in 0xFFFF zone are for "secure" or "encrypted" sources */
32  srcHttps = 1 << 0,
33  srcFtps = 1 << 1,
34  srcIcaps = 1 << 2,
35  srcEcaps = 1 << 3,
36 
37  /* these flags "taint" the message: it may have been observed or mangled outside Squid */
38  srcHttp = 1 << (16 + 0),
39  srcFtp = 1 << (16 + 1),
40  srcIcap = 1 << (16 + 2),
41  srcEcap = 1 << (16 + 3),
42  srcGopher = 1 << (16 + 14),
43  srcWhois = 1 << (16 + 15),
44  srcUnsafe = 0xFFFF0000,
45  srcSafe = 0x0000FFFF
46  };
47 
49  virtual ~Message();
50 
51  virtual void reset() = 0; // will have body when http*Clean()s are gone
52 
53  void packInto(Packable *, bool full_uri) const;
54 
56  virtual Http::Message *clone() const = 0; // TODO rename: not a true copy?
57 
59  void setContentLength(int64_t);
60 
67  bool persistent() const;
68 
69 public:
73 
75 
77 
78  /* Unsupported, writable, may disappear/change in the future
79  * For replies, sums _stored_ status-line, headers, and <CRLF>.
80  * Also used to report parsed header size if parse() is successful */
81  int hdr_sz = 0;
82 
83  int64_t content_length = 0;
84 
86  enum ParseState {
91  };
92 
95 
98 
99  uint32_t sources = 0;
100 
102  void putCc(const HttpHdrCc *otherCc);
103 
104  // returns true and sets hdr_sz on success
105  // returns false and sets *error to zero when needs more data
106  // returns false and sets *error to a positive Http::StatusCode on error
107  bool parse(const char *buf, const size_t sz, bool eol, Http::StatusCode *error);
108 
109  bool parseCharBuf(const char *buf, ssize_t end);
110 
111  int httpMsgParseStep(const char *buf, int len, int atEnd);
112 
113  virtual int httpMsgParseError();
114 
115  // Parser-NG transitional parsing of mime headers
116  bool parseHeader(Http1::Parser &); // TODO move this function to the parser
117 
118  virtual bool expectingBody(const HttpRequestMethod&, int64_t&) const = 0;
119 
120  void firstLineBuf(MemBuf&);
121 
122  virtual bool inheritProperties(const Http::Message *) = 0;
123 
124 protected:
132  virtual bool sanityCheckStartLine(const char *buf, const size_t hdr_len, Http::StatusCode *error) = 0;
133 
134  virtual void packFirstLineInto(Packable * p, bool full_uri) const = 0;
135 
136  virtual bool parseFirstLine(const char *blk_start, const char *blk_end) = 0;
137 
138  virtual void hdrCacheInit();
139 };
140 
141 } // namespace Http
142 
143 inline void
145 {
146  if (a) {
147  if (a->unlock() == 0)
148  delete a;
149  a = nullptr;
150  }
151 }
152 
153 inline void
155 {
156  if (a)
157  a->lock();
158 }
159 
160 #endif /* SQUID_HTTPMSG_H */
161 
virtual void packFirstLineInto(Packable *p, bool full_uri) const =0
http_hdr_owner_type
Definition: HttpHeader.h:31
https_port or bumped http_port tunnel; HTTPS server
Definition: Message.h:32
HttpHdrCc * cache_control
Definition: Message.h:76
ParseState pstate
the current parsing state
Definition: Message.h:94
int hdr_sz
Definition: Message.h:81
Safe sources mask.
Definition: Message.h:45
void firstLineBuf(MemBuf &)
useful for debugging
Definition: Message.cc:291
void error(char *format,...)
http_port or HTTP server
Definition: Message.h:38
void HTTPMSGLOCK(Http::Message *a)
Definition: Message.h:154
bool persistent() const
Definition: Message.cc:257
virtual void reset()=0
AnyP::ProtocolVersion http_ver
Definition: Message.h:72
char * p
Definition: membanger.c:43
virtual bool parseFirstLine(const char *blk_start, const char *blk_end)=0
traditional ICAP service without encryption
Definition: Message.h:40
ftp_port or FTP server
Definition: Message.h:39
Whois server.
Definition: Message.h:43
StatusCode
Definition: StatusCode.h:20
int64_t content_length
Definition: Message.h:83
virtual bool inheritProperties(const Http::Message *)=0
ftps_port or SFTP server; currently unused
Definition: Message.h:33
common parts of HttpRequest and HttpReply
Definition: Message.h:24
ParseState
parse state of HttpReply or HttpRequest
Definition: Message.h:86
int unsigned int const char *desc STUB void int len
Definition: stub_fd.cc:20
void setContentLength(int64_t)
[re]sets Content-Length header and cached value
Definition: Message.cc:249
void const char * buf
Definition: stub_helper.cc:16
HttpHeader header
Definition: Message.h:74
eCAP service that is considered secure; currently unused
Definition: Message.h:35
virtual bool sanityCheckStartLine(const char *buf, const size_t hdr_len, Http::StatusCode *error)=0
void putCc(const HttpHdrCc *otherCc)
copies Cache-Control header to this message
Definition: Message.cc:33
virtual Http::Message * clone() const =0
Definition: MemBuf.h:23
bool parseCharBuf(const char *buf, ssize_t end)
Definition: Message.cc:147
virtual ~Message()
Definition: Message.cc:27
int a
Definition: membanger.c:50
BodyPipe::Pointer body_pipe
optional pipeline to receive message body
Definition: Message.h:97
void packInto(Packable *, bool full_uri) const
produce a message copy, except for a few connection-specific settings
Definition: Message.cc:274
int httpMsgParseStep(const char *buf, int len, int atEnd)
Definition: Message.cc:169
Gopher server.
Definition: Message.h:42
virtual void hdrCacheInit()
Definition: Message.cc:282
Sources
Who may have created or modified this message?
Definition: Message.h:28
bool parse(const char *buf, const size_t sz, bool eol, Http::StatusCode *error)
Definition: Message.cc:79
virtual int httpMsgParseError()
Definition: Message.cc:242
virtual bool expectingBody(const HttpRequestMethod &, int64_t &) const =0
bool parseHeader(Http1::Parser &)
Definition: Message.cc:223
eCAP service that uses insecure libraries/daemons
Definition: Message.h:41
Unsafe sources mask.
Definition: Message.h:44
Message(http_hdr_owner_type)
Definition: Message.cc:22
uint32_t sources
The message sources.
Definition: Message.h:99
void HTTPMSGUNLOCK(Http::Message *a)
Definition: Message.h:144
Secure ICAP service.
Definition: Message.h:34

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors