HttpRequest.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2025 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_HTTPREQUEST_H
10 #define SQUID_SRC_HTTPREQUEST_H
11 
12 #include "anyp/Uri.h"
13 #include "base/CbcPointer.h"
14 #include "dns/forward.h"
15 #include "error/Error.h"
16 #include "HierarchyLogEntry.h"
17 #include "http/Message.h"
18 #include "http/RequestMethod.h"
19 #include "MasterXaction.h"
20 #include "Notes.h"
21 #include "RequestFlags.h"
22 
23 #if USE_AUTH
24 #include "auth/UserRequest.h"
25 #endif
26 #if USE_ADAPTATION
27 #include "adaptation/History.h"
28 #endif
29 #if ICAP_CLIENT
31 #endif
32 #if USE_SQUID_EUI
33 #include "eui/Eui48.h"
34 #include "eui/Eui64.h"
35 #endif
36 
39 class CachePeer;
40 class ConnStateData;
41 class Downloader;
42 
43 /* Http Request */
44 void httpRequestPack(void *obj, Packable *p);
45 
46 class HttpHdrRange;
47 
49 {
51 
52 public:
54 
56  HttpRequest(const HttpRequestMethod& aMethod, AnyP::ProtocolType aProtocol, const char *schemeImage, const char *aUrlpath, const MasterXaction::Pointer &);
57  ~HttpRequest() override;
58  void reset() override;
59 
60  void initHTTP(const HttpRequestMethod& aMethod, AnyP::ProtocolType aProtocol, const char *schemeImage, const char *aUrlpath);
61 
62  HttpRequest *clone() const override;
63 
67  bool maybeCacheable();
68 
69  bool conditional() const;
70 
72  bool canHandle1xx() const;
73 
76  char *canonicalCleanUrl() const;
77 
78 #if USE_ADAPTATION
82  Adaptation::History::Pointer adaptHistory(bool createIfNone = false) const;
84  void adaptHistoryImport(const HttpRequest &them);
85 #endif
86 #if ICAP_CLIENT
89 #endif
90 
91  /* If a request goes through several destinations, then the following two
92  * methods will be called several times, in destinations-dependent order. */
94  void prepForPeering(const CachePeer &peer);
96  void prepForDirect();
97 
98  void recordLookup(const Dns::LookupDetails &detail);
99 
101  void detailError(const err_type c, const ErrorDetail::Pointer &d) { error.update(c, d); }
103  void clearError();
104 
106  void manager(const CbcPointer<ConnStateData> &aMgr, const AccessLogEntryPointer &al);
107 
108 protected:
109  void clean();
110 
111  void init();
112 
113 public:
116 
117 private:
118 #if USE_ADAPTATION
120 #endif
121 #if ICAP_CLIENT
123 #endif
124 
125 public:
126 #if USE_AUTH
128 #endif
129 
131  const SBuf &effectiveRequestUri() const;
132 
140 
142 
144 
145  time_t ims;
146 
147  int imslen;
148 
150 
151 #if FOLLOW_X_FORWARDED_FOR
153 #endif /* FOLLOW_X_FORWARDED_FOR */
154 
156 
158 
159  int dnsWait;
160 
162 
163  char *peer_login; /* Configured peer login:password */
164 
165  time_t lastmod; /* Used on refreshes */
166 
169 
170  char *peer_domain; /* Configured peer forceddomain */
171 
172  String myportname; // Internal tag name= value from port this requests arrived in.
173 
174  String tag; /* Internal tag for this request */
175 
176  String extacl_user; /* User name returned by extacl lookup */
177 
178  String extacl_passwd; /* Password returned by extacl lookup */
179 
180  String extacl_log; /* String to be used for access.log purposes */
181 
182  String extacl_message; /* String to be used for error page purposes */
183 
184 #if FOLLOW_X_FORWARDED_FOR
185  String x_forwarded_for_iterator; /* XXX a list of IP addresses */
186 #endif /* FOLLOW_X_FORWARDED_FOR */
187 
190 
193 
194 public:
195  bool multipartRangeRequest() const;
196 
197  bool parseFirstLine(const char *start, const char *end) override;
198 
199  bool expectingBody(const HttpRequestMethod& unused, int64_t&) const override;
200 
201  bool bodyNibbled() const; // the request has a [partially] consumed body
202 
203  int prefixLen() const;
204 
205  void swapOut(StoreEntry * e);
206 
207  void pack(Packable * p) const;
208 
209  static void httpRequestPack(void *obj, Packable *p);
210 
212 
215 
217 
223  const SBuf storeId();
224 
231 
234 
237 
239  void ignoreRange(const char *reason);
240  int64_t getRangeOffsetLimit(); /* the result of this function gets cached in rangeOffsetLimit */
241 
245  bool hasNotes() const { return bool(theNotes) && !theNotes->empty(); }
246 
248 
252 
255  bool parseHeader(Http1::Parser &hp);
258  bool parseHeader(const char *buffer, const size_t size);
259 
260 private:
261  mutable int64_t rangeOffsetLimit; /* caches the result of getRangeOffsetLimit */
262 
266 protected:
267  void packFirstLineInto(Packable * p, bool full_uri) const override;
268 
269  bool sanityCheckStartLine(const char *buf, const size_t hdr_len, Http::StatusCode *error) override;
270 
271  void hdrCacheInit() override;
272 
273  bool inheritProperties(const Http::Message *) override;
274 };
275 
276 class ConnStateData;
280 void UpdateRequestNotes(ConnStateData *csd, HttpRequest &request, NotePairs const &notes);
281 
285 
289 
290 #endif /* SQUID_SRC_HTTPREQUEST_H */
291 
bool bodyNibbled() const
Definition: HttpRequest.cc:439
static HttpRequest * FromUrl(const SBuf &url, const MasterXaction::Pointer &, const HttpRequestMethod &method=Http::METHOD_GET)
Definition: HttpRequest.cc:516
void ignoreRange(const char *reason)
forgets about the cached Range header (for a reason)
Definition: HttpRequest.cc:620
AnyP::Uri url
the request URI
Definition: HttpRequest.h:115
common parts of HttpRequest and HttpReply
Definition: Message.h:25
MEMPROXY_CLASS(HttpRequest)
char * canonicalCleanUrl() const
Definition: HttpRequest.cc:812
bool parseHeader(Http1::Parser &hp)
Definition: HttpRequest.cc:710
Definition: Uri.h:31
bool hasNotes() const
Definition: HttpRequest.h:245
RequestFlags flags
Definition: HttpRequest.h:141
void clearError()
clear error details, useful for retries/repeats
Definition: HttpRequest.cc:464
String x_forwarded_for_iterator
Definition: HttpRequest.h:185
static void httpRequestPack(void *obj, Packable *p)
AnyP::Port FindListeningPortNumber(const HttpRequest *, const AccessLogEntry *)
Definition: HttpRequest.cc:871
int64_t getRangeOffsetLimit()
Definition: HttpRequest.cc:593
CbcPointer< Downloader > downloader
The Downloader object which initiated the HTTP request if any.
Definition: HttpRequest.h:233
Definition: SBuf.h:93
bool expectingBody(const HttpRequestMethod &unused, int64_t &) const override
Definition: HttpRequest.cc:487
~HttpRequest() override
Definition: HttpRequest.cc:61
bool maybeCacheable()
Definition: HttpRequest.cc:537
Auth::UserRequest::Pointer auth_user_request
Definition: HttpRequest.h:127
int dnsWait
sum of DNS lookup delays in milliseconds, for dt
Definition: HttpRequest.h:159
StatusCode
Definition: StatusCode.h:20
void hdrCacheInit() override
Definition: HttpRequest.cc:378
bool empty() const
Definition: Notes.h:260
err_type
Definition: forward.h:14
bool multipartRangeRequest() const
Definition: HttpRequest.cc:433
void detailError(const err_type c, const ErrorDetail::Pointer &d)
sets error detail if no earlier detail was available
Definition: HttpRequest.h:101
bool conditional() const
has at least one recognized If-* header
Definition: HttpRequest.cc:571
String extacl_user
Definition: HttpRequest.h:176
Adaptation::History::Pointer adaptHistory_
per-HTTP transaction info
Definition: HttpRequest.h:119
Error error
the first transaction problem encountered (or falsy)
Definition: HttpRequest.h:161
const Ip::Address * FindListeningPortAddress(const HttpRequest *, const AccessLogEntry *)
Definition: HttpRequest.cc:862
a transaction problem
Definition: Error.h:27
String myportname
Definition: HttpRequest.h:172
void init()
Definition: HttpRequest.cc:76
void configureContentLengthInterpreter(Http::ContentLengthInterpreter &) override
configures the interpreter as needed
Definition: HttpRequest.h:247
ProtocolType
Definition: ProtocolType.h:23
time_t lastmod
Definition: HttpRequest.h:165
void httpRequestPack(void *obj, Packable *p)
Definition: HttpRequest.cc:360
String etag
A strong etag of the cached entry. Used for refreshing that entry.
Definition: HttpRequest.h:189
void clean()
Definition: HttpRequest.cc:120
int size
Definition: ModDevPoll.cc:69
void recordLookup(const Dns::LookupDetails &detail)
Definition: HttpRequest.cc:579
Ip::Address indirect_client_addr
Definition: HttpRequest.h:152
char * peer_login
Definition: HttpRequest.h:163
ConnStateData * pinnedConnection()
Definition: HttpRequest.cc:724
bool canHandle1xx() const
whether the client is likely to be able to handle a 1xx reply
Definition: HttpRequest.cc:634
char * peer_domain
Definition: HttpRequest.h:170
Adaptation::Icap::History::Pointer icapHistory() const
Returns possibly nil history, creating it if icap logging is enabled.
Definition: HttpRequest.cc:388
RefCount< AccessLogEntry > AccessLogEntryPointer
Definition: HttpRequest.h:37
HttpRequest(const MasterXaction::Pointer &)
Definition: HttpRequest.cc:42
NotePairs::Pointer notes()
MasterXaction::Pointer masterXaction
the master transaction this request belongs to. Never nil.
Definition: HttpRequest.h:236
HierarchyLogEntry hier
Definition: HttpRequest.h:157
encapsulates DNS lookup results
Definition: LookupDetails.h:22
SBuf vary_headers
The variant second-stage cache key. Generated from Vary header pattern for this request.
Definition: HttpRequest.h:168
Ip::Address my_addr
Definition: HttpRequest.h:155
Adaptation::Icap::History::Pointer icapHistory_
per-HTTP transaction info
Definition: HttpRequest.h:122
HttpHdrRange * range
Definition: HttpRequest.h:143
void initHTTP(const HttpRequestMethod &aMethod, AnyP::ProtocolType aProtocol, const char *schemeImage, const char *aUrlpath)
Definition: HttpRequest.cc:68
Http::StatusCode checkEntityFraming() const
Definition: HttpRequest.cc:646
int prefixLen() const
Definition: HttpRequest.cc:368
HttpRequest * clone() const override
Definition: HttpRequest.cc:174
String extacl_log
Definition: HttpRequest.h:180
RefCount< HttpRequest > Pointer
Definition: HttpRequest.h:53
bool parseFirstLine(const char *start, const char *end) override
Definition: HttpRequest.cc:293
Adaptation::History::Pointer adaptHistory(bool createIfNone=false) const
Returns possibly nil history, creating it if requested.
Definition: HttpRequest.cc:403
Adaptation::History::Pointer adaptLogHistory() const
Returns possibly nil history, creating it if adapt. logging is enabled.
Definition: HttpRequest.cc:414
void UpdateRequestNotes(ConnStateData *csd, HttpRequest &request, NotePairs const &notes)
Definition: HttpRequest.cc:759
HttpRequestMethod method
Definition: HttpRequest.h:114
void prepForPeering(const CachePeer &peer)
get ready to be sent to the given cache_peer, including originserver
Definition: HttpRequest.cc:445
bool inheritProperties(const Http::Message *) override
Definition: HttpRequest.cc:213
bool forcedBodyContinuation
whether we have responded with HTTP 100 or FTP 150 already
Definition: HttpRequest.h:192
const SBuf storeId()
Definition: HttpRequest.cc:732
std::optional< KnownPort > Port
validated/supported port number (if any)
Definition: UriScheme.h:26
static HttpRequest * FromUrlXXX(const char *url, const MasterXaction::Pointer &, const HttpRequestMethod &method=Http::METHOD_GET)
Definition: HttpRequest.cc:527
int64_t rangeOffsetLimit
Definition: HttpRequest.h:261
void manager(const CbcPointer< ConnStateData > &aMgr, const AccessLogEntryPointer &al)
associates the request with a from-client connection manager
Definition: HttpRequest.cc:773
void packFirstLineInto(Packable *p, bool full_uri) const override
Definition: HttpRequest.cc:471
time_t ims
Definition: HttpRequest.h:145
String extacl_message
Definition: HttpRequest.h:182
void update(const Error &)
if necessary, stores the given error information (if any)
Definition: Error.cc:51
void prepForDirect()
get ready to be sent directly to an origin server, excluding originserver
Definition: HttpRequest.cc:455
void swapOut(StoreEntry *e)
Definition: HttpRequest.cc:333
@ METHOD_GET
Definition: MethodType.h:25
const SBuf & effectiveRequestUri() const
RFC 7230 section 5.5 - Effective Request URI.
Definition: HttpRequest.cc:743
NotePairs::Pointer notes()
Definition: HttpRequest.cc:751
Ip::Address client_addr
Definition: HttpRequest.h:149
String tag
Definition: HttpRequest.h:174
void reset() override
Definition: HttpRequest.cc:167
void adaptHistoryImport(const HttpRequest &them)
Makes their history ours, throwing on conflicts.
Definition: HttpRequest.cc:420
String extacl_passwd
Definition: HttpRequest.h:178
String store_id
Definition: HttpRequest.h:139
bool sanityCheckStartLine(const char *buf, const size_t hdr_len, Http::StatusCode *error) override
Definition: HttpRequest.cc:267
NotePairs::Pointer theNotes
Definition: HttpRequest.h:265
CbcPointer< ConnStateData > clientConnectionManager
Definition: HttpRequest.h:230
void pack(Packable *p) const
Definition: HttpRequest.cc:343

 

Introduction

Documentation

Support

Miscellaneous