/*
- * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
#endif
class ConnStateData;
+class Downloader;
/* Http Request */
void httpRequestPack(void *obj, Packable *p);
typedef RefCount<HttpRequest> Pointer;
HttpRequest();
- HttpRequest(const HttpRequestMethod& aMethod, AnyP::ProtocolType aProtocol, const char *aUrlpath);
+ HttpRequest(const HttpRequestMethod& aMethod, AnyP::ProtocolType aProtocol, const char *schemeImage, const char *aUrlpath);
~HttpRequest();
virtual void reset();
- void initHTTP(const HttpRequestMethod& aMethod, AnyP::ProtocolType aProtocol, const char *aUrlpath);
+ void initHTTP(const HttpRequestMethod& aMethod, AnyP::ProtocolType aProtocol, const char *schemeImage, const char *aUrlpath);
virtual HttpRequest *clone() const;
/// whether the client is likely to be able to handle a 1xx reply
bool canHandle1xx() const;
- /* HACK: This method is only inline to get around Makefile dependancies */
- /* caused by HttpRequest being used in places it really shouldn't. */
- /* ideally URL would be used directly instead. */
- inline void SetHost(const char *src) {
- url.host(src);
- safe_free(canonical); // force its re-build
- };
-
#if USE_ADAPTATION
/// Returns possibly nil history, creating it if adapt. logging is enabled
Adaptation::History::Pointer adaptLogHistory() const;
Auth::UserRequest::Pointer auth_user_request;
#endif
- char *canonical;
+ /// RFC 7230 section 5.5 - Effective Request URI
+ const SBuf &effectiveRequestUri() const;
/**
* If defined, store_id_program mapped the request URL to this ID.
time_t lastmod; /* Used on refreshes */
- const char *vary_headers; /* Used when varying entities are detected. Changes how the store key is calculated */
+ /// The variant second-stage cache key. Generated from Vary header pattern for this request.
+ SBuf vary_headers;
char *peer_domain; /* Configured peer forceddomain */
bool parseFirstLine(const char *start, const char *end);
- bool parseHeader(Http1::RequestParser &hp); // TODO move this function to the parser
-
virtual bool expectingBody(const HttpRequestMethod& unused, int64_t&) const;
bool bodyNibbled() const; // the request has a [partially] consumed body
void swapOut(StoreEntry * e);
- void pack(Packable * p);
+ void pack(Packable * p) const;
static void httpRequestPack(void *obj, Packable *p);
- static HttpRequest * CreateFromUrlAndMethod(char * url, const HttpRequestMethod& method);
-
- static HttpRequest * CreateFromUrl(char * url);
+ static HttpRequest * CreateFromUrl(char * url, const HttpRequestMethod &method = Http::METHOD_GET);
ConnStateData *pinnedConnection();
/**
* Returns the current StoreID for the request as a nul-terminated char*.
* Always returns the current id for the request
- * (either the request canonical url or modified ID by the helper).
- * Does not return NULL.
+ * (either the effective request URI or modified ID by the helper).
*/
- const char *storeId();
+ const SBuf storeId();
/**
* The client connection manager, if known;
*/
CbcPointer<ConnStateData> clientConnectionManager;
+ /// The Downloader object which initiated the HTTP request if any
+ CbcPointer<Downloader> downloader;
+
/// forgets about the cached Range header (for a reason)
void ignoreRange(const char *reason);
int64_t getRangeOffsetLimit(); /* the result of this function gets cached in rangeOffsetLimit */