HttpReply.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_SRC_HTTPREPLY_H
10 #define SQUID_SRC_HTTPREPLY_H
11 
12 #include "http/StatusLine.h"
13 #include "HttpBody.h"
14 #include "HttpRequest.h"
15 
16 void httpReplyInitModule(void);
17 
18 /* Sync changes here with HttpReply.cc */
19 
20 class HttpHdrContRange;
21 
22 class HttpHdrSc;
23 
24 class HttpReply: public Http::Message
25 {
27 
28 public:
30 
31  HttpReply();
32  ~HttpReply() override;
33 
34  void reset() override;
35 
36  /* Http::Message API */
37  bool sanityCheckStartLine(const char *buf, const size_t hdr_len, Http::StatusCode *error) override;
38 
40  time_t date;
41 
42  time_t last_modified;
43 
44  time_t expires;
45 
47 
49 
51  const HttpHdrContRange *contentRange() const;
52 
53  short int keep_alive;
54 
57 
62  bool do_clean;
63 
64 public:
65  int httpMsgParseError() override;
66 
67  bool expectingBody(const HttpRequestMethod&, int64_t&) const override;
68 
69  bool inheritProperties(const Http::Message *) override;
70 
73  Pointer recreateOnNotModified(const HttpReply &reply304) const;
74 
76  void setHeaders(Http::StatusCode status,
77  const char *reason, const char *ctype, int64_t clen, time_t lmt, time_t expires);
78 
80  MemBuf *pack() const;
81 
84 
86  HttpReplyPointer make304() const;
87 
88  void redirect(Http::StatusCode, const char *);
89 
90  int64_t bodySize(const HttpRequestMethod&) const;
91 
95  bool receivedBodyTooLarge(HttpRequest&, int64_t receivedBodySize);
96 
100  bool expectedBodyTooLarge(HttpRequest& request);
101 
102  int validatorsMatch (HttpReply const *other) const;
103 
106  void packHeadersUsingFastPacker(Packable &p) const;
108  void packHeadersUsingSlowPacker(Packable &p) const;
109 
113  HttpReply *clone() const override;
114 
115  void hdrCacheInit() override;
116 
119  bool olderThan(const HttpReply *them) const;
120 
123 
126  bool parseHeader(Http1::Parser &hp);
127 
133  size_t parseTerminatedPrefix(const char *, size_t);
134 
137  size_t prefixLen() const;
138 
139 private:
141  void init();
142 
143  void clean();
144 
145  void hdrCacheClean();
146 
147  void packInto(MemBuf &) const;
148 
149  /* ez-routines */
151  MemBuf *packed304Reply() const;
152 
153  /* header manipulation */
154  time_t hdrExpirationTime();
155 
159  void calcMaxBodySize(HttpRequest& request) const;
160 
161  mutable int64_t bodySizeMax;
164 
165 protected:
166  void packFirstLineInto(Packable * p, bool) const override { sline.packInto(p); }
167 
168  bool parseFirstLine(const char *start, const char *end) override;
169 };
170 
171 #endif /* SQUID_SRC_HTTPREPLY_H */
172 
HttpReplyPointer make304() const
Definition: HttpReply.cc:129
bool parseFirstLine(const char *start, const char *end) override
Definition: HttpReply.cc:457
bool expectingBody(const HttpRequestMethod &, int64_t &) const override
Definition: HttpReply.cc:528
String content_type
Definition: HttpReply.h:46
bool expectedBodyTooLarge(HttpRequest &request)
Definition: HttpReply.cc:565
RefCount< HttpReply > Pointer
Definition: HttpReply.h:29
common parts of HttpRequest and HttpReply
Definition: Message.h:25
bool do_clean
Definition: HttpReply.h:62
time_t hdrExpirationTime()
Definition: HttpReply.cc:283
int64_t bodySizeMax
Definition: HttpReply.h:161
void error(char *format,...)
int64_t bodySize(const HttpRequestMethod &) const
Definition: HttpReply.cc:377
HttpReply * clone() const override
Definition: HttpReply.cc:611
void packInto(Packable *) const
pack fields into a Packable object
Definition: StatusLine.cc:86
void packHeadersUsingSlowPacker(Packable &p) const
same as packHeadersUsingFastPacker() but assumes that p cannot quickly process small additions
Definition: HttpReply.cc:95
Http::StatusLine sline
Definition: HttpReply.h:56
time_t last_modified
Definition: HttpReply.h:42
StatusCode
Definition: StatusCode.h:20
void calcMaxBodySize(HttpRequest &request) const
Definition: HttpReply.cc:586
MemBuf * packed304Reply() const
Definition: HttpReply.cc:159
void packHeadersUsingFastPacker(Packable &p) const
Definition: HttpReply.cc:87
HttpBody body
Definition: HttpReply.h:58
void removeIrrelevantContentLength()
Some response status codes prohibit sending Content-Length (RFC 7230 section 3.3.2).
Definition: HttpReply.cc:646
time_t expires
Definition: HttpReply.h:44
void packFirstLineInto(Packable *p, bool) const override
Definition: HttpReply.h:166
MemBuf * pack() const
Definition: HttpReply.cc:112
Definition: MemBuf.h:23
void reset() override
Definition: HttpReply.cc:59
void init()
Definition: HttpReply.cc:51
void redirect(Http::StatusCode, const char *)
Definition: HttpReply.cc:205
bool inheritProperties(const Http::Message *) override
Definition: HttpReply.cc:627
bool olderThan(const HttpReply *them) const
Definition: HttpReply.cc:638
void packInto(MemBuf &) const
Definition: HttpReply.cc:104
time_t date
Definition: HttpReply.h:40
bool receivedBodyTooLarge(HttpRequest &, int64_t receivedBodySize)
Definition: HttpReply.cc:557
bool parseHeader(Http1::Parser &hp)
parses reply header using Parser
Definition: HttpReply.cc:507
int validatorsMatch(HttpReply const *other) const
Definition: HttpReply.cc:223
String protoPrefix
Definition: HttpReply.h:60
void clean()
Definition: HttpReply.cc:73
size_t prefixLen() const
Definition: HttpReply.cc:495
const HttpHdrContRange * contentRange() const
Definition: HttpReply.cc:345
size_t parseTerminatedPrefix(const char *, size_t)
Definition: HttpReply.cc:463
MEMPROXY_CLASS(HttpReply)
~HttpReply() override
Definition: HttpReply.cc:44
bool sanityCheckStartLine(const char *buf, const size_t hdr_len, Http::StatusCode *error) override
Definition: HttpReply.cc:402
void hdrCacheClean()
Definition: HttpReply.cc:353
static HttpReplyPointer MakeConnectionEstablished()
construct and return an HTTP/200 (Connection Established) response
Definition: HttpReply.cc:121
HttpHdrSc * surrogate_control
Definition: HttpReply.h:48
HttpHdrContRange * content_range
parsed Content-Range; nil for non-206 responses!
Definition: HttpReply.h:163
void hdrCacheInit() override
Definition: HttpReply.cc:321
void setHeaders(Http::StatusCode status, const char *reason, const char *ctype, int64_t clen, time_t lmt, time_t expires)
Definition: HttpReply.cc:170
void configureContentLengthInterpreter(Http::ContentLengthInterpreter &) override
configures the interpreter as needed
Definition: HttpReply.cc:501
void httpReplyInitModule(void)
int httpMsgParseError() override
Definition: HttpReply.cc:515
short int keep_alive
Definition: HttpReply.h:53
Pointer recreateOnNotModified(const HttpReply &reply304) const
Definition: HttpReply.cc:265

 

Introduction

Documentation

Support

Miscellaneous