client_side_reply.cc
Go to the documentation of this file.
54 ErrorState *clientBuildError(err_type, Http::StatusCode, char const *, const ConnStateData *, HttpRequest *, const AccessLogEntry::Pointer &);
111 setReplyToError(failedrequest ? failedrequest->method : HttpRequestMethod(Http::METHOD_NONE), errstate);
153 entry->lock("clientReplyContext::setReplyToStoreEntry"); // removeClientStoreReference() unlocks
180 clientReplyContext::removeClientStoreReference(store_client **scp, ClientHttpRequest *aHttpRequest)
348 Comm::ConnectionPointer conn = http->getConn() != nullptr ? http->getConn()->clientConnection : nullptr;
433 debugs(88, 3, "request to origin aborted '" << http->storeEntry()->url() << "', sending old entry to client");
462 if (http->request->flags.ims && !old_entry->modifiedSince(http->request->ims, http->request->imslen)) {
470 debugs(88, 3, "origin replied 304, revalidated existing entry and sending " << oldStatus << " to client");
483 debugs(88, 3, "origin replied " << status << " but with an older date header, sending old entry (" << oldStatus << ") to client");
497 debugs(88, 3, "origin replied with error " << status << ", forwarding to client due to fail_on_validation_err");
504 debugs(88, 3, "origin replied with error " << status << ", sending old entry (" << oldStatus << ") to client");
572 debugs(33, DBG_IMPORTANT, "clientProcessHit: URL mismatch, '" << e->mem_obj->storeId() << "' != '" << http->request->storeId() << "'");
747 err = clientBuildError(ERR_ACCESS_DENIED, Http::scForbidden, nullptr, http->getConn(), http->request, http->al);
769 Comm::ConnectionPointer conn = http->getConn() != nullptr ? http->getConn()->clientConnection : nullptr;
989 clientReplyContext::purgeEntry(StoreEntry &entry, const Http::MethodType methodType, const char *descriptionPrefix)
1008 rep->setHeaders(Http::scOkay, nullptr, "text/plain", http->request->prefixLen(), 0, squid_curtime);
1232 if ( !request->peer_login || (strcmp(request->peer_login,"PASS") != 0 && strcmp(request->peer_login,"PASSTHRU") != 0)) {
1277 hdr->putTime(Http::HdrType::EXPIRES, squid_curtime + http->storeEntry()->expires - http->storeEntry()->timestamp);
1282 snprintf(age, sizeof(age), "%" PRId64, static_cast<int64_t>(squid_curtime - http->storeEntry()->timestamp));
1367 Auth::UserRequest::AddReplyAuthHeader(reply, request->auth_user_request, request, http->flags.accel, 0);
1385 if (!Config.onoff.error_pconns && reply->sline.status() >= 400 && !request->flags.mustKeepalive) {
1389 debugs(33, 2, "clientBuildReplyHeader: Connection Keep-Alive not requested by admin or client");
1395 debugs(33, 2, "clientBuildReplyHeader: Connection oriented auth but server side non-persistent");
1430 hdr->putStr(Http::HdrType::CONNECTION, request->flags.proxyKeepalive ? "keep-alive" : "close");
1738 debugs(88, 5, "clientReplyContext::pushStreamData: marking request as complete due to 0 length store result");
1851 ACLFilledChecklist::NonBlockingCheck(std::move(replyChecklist), ProcessReplyAccessResult, this);
2078 const_cast<HttpRequest *&>(http->request) = new HttpRequest(m, AnyP::PROTO_NONE, "http", null_string, mx);
2121 err->src_addr = conn && conn->clientConnection ? conn->clientConnection->remote : Ip::Address::NoAddr();
Definition: parse.c:104
Definition: LogTags.h:69
int storeClientIsThisAClient(store_client *sc, void *someClient)
static DelayId DelayClient(ClientHttpRequest *, HttpReply *reply=nullptr)
Definition: DelayId.cc:68
Definition: FilledChecklist.h:33
void removeClientStoreReference(store_client **scp, ClientHttpRequest *http)
Definition: client_side_reply.cc:180
bool expectedBodyTooLarge(HttpRequest &request)
Definition: HttpReply.cc:565
static void AddReplyAuthHeader(HttpReply *rep, UserRequest::Pointer auth_user_request, HttpRequest *request, int accelerated, int internal)
Add the appropriate [Proxy-]Authenticate header to the given reply.
Definition: UserRequest.cc:491
void ignoreRange(const char *reason)
forgets about the cached Range header (for a reason)
Definition: HttpRequest.cc:621
struct StoreIOBuffer::@130 flags
void ensureMemObject(const char *storeId, const char *logUri, const HttpRequestMethod &aMethod)
initialize mem_obj (if needed) and set URIs/method (if missing)
Definition: store.cc:1589
Definition: Acl.h:53
struct SquidConfig::@98 accessList
struct ClientHttpRequest::Redirect redirect
~clientReplyContext() override
Definition: client_side_reply.cc:58
void errorAppendEntry(StoreEntry *entry, ErrorState *err)
Definition: errorpage.cc:738
void sendNotModifiedOrPreconditionFailedError()
Definition: client_side_reply.cc:1812
int varyEvaluateMatch(StoreEntry *entry, HttpRequest *request)
Definition: client_side.cc:3393
const cache_key * storeKeyPublic(const char *url, const HttpRequestMethod &method, const KeyScope keyScope)
Definition: store_key_md5.cc:95
void createStoreEntry(const HttpRequestMethod &m, RequestFlags flags)
Definition: client_side_reply.cc:2064
void addVia(const AnyP::ProtocolVersion &ver, const HttpHeader *from=nullptr)
Definition: HttpHeader.cc:945
const SBuf & lastCheckDescription() const
describes the ACL that was evaluated last while obtaining this answer (for debugging)
Definition: Acl.cc:123
int doTosLocalMiss(const Comm::ConnectionPointer &conn, const hier_code hierCode)
Definition: QosConfig.cc:230
void httpHdrMangleList(HttpHeader *l, HttpRequest *request, const AccessLogEntryPointer &al, req_or_rep_t req_or_rep)
Definition: HttpHeaderTools.cc:331
void fillChecklist(ACLFilledChecklist &) const override
configure the given checklist (to reflect the current transaction state)
Definition: client_side_reply.cc:2056
void updateLoggingTags(const LogTags_ot code)
update the code in the transaction processing tags
Definition: client_side_request.h:91
void sendStreamError(StoreIOBuffer const &result)
Definition: client_side_reply.cc:1718
void removeStoreReference(store_client **scp, StoreEntry **ep)
Definition: client_side_reply.cc:165
struct ClientHttpRequest::Flags flags
clientStream_status_t CSS(clientStreamNode *, ClientHttpRequest *)
Definition: clientStreamForward.h:35
struct SquidConfig::@97 onoff
Auth::UserRequest::Pointer auth_user_request
Definition: HttpRequest.h:127
struct ClientHttpRequest::Out out
ACLFilledChecklist::MakingPointer clientAclChecklistCreate(const acl_access *acl, ClientHttpRequest *http)
Definition: client_side.cc:3457
void replaceHttpReply(const HttpReplyPointer &, const bool andStartWriting=true)
Definition: store.cc:1705
Definition: forward.h:17
bool errorInStream(const StoreIOBuffer &result) const
Definition: client_side_reply.cc:1710
static void Start(const Comm::ConnectionPointer &client, StoreEntry *, HttpRequest *, const AccessLogEntryPointer &alp)
Initiates request forwarding to a peer or origin server.
Definition: FwdState.cc:338
void httpHeaderPutStrf(HttpHeader *hdr, Http::HdrType id, const char *fmt,...)
Definition: HttpHeaderTools.cc:54
StoreEntry * storeGetPublicByRequest(HttpRequest *req, const KeyScope keyScope)
Definition: store.cc:516
int refreshCheckHTTP(const StoreEntry *entry, HttpRequest *request)
Definition: refresh.cc:582
bool allowCollapsing(StoreEntry *, const RequestFlags &, const HttpRequestMethod &)
tries to make the entry available for collapsing future requests
Definition: Controller.cc:727
void requestMoreBodyFromStore()
Definition: client_side_reply.cc:249
CollapsedRevalidation collapsedRevalidation
Definition: client_side_reply.h:158
StoreEntry * storeGetPublicByRequestMethod(HttpRequest *req, const HttpRequestMethod &method, const KeyScope keyScope)
Definition: store.cc:510
void sendPreconditionFailedError()
send 412 (Precondition Failed) to client
Definition: client_side_reply.cc:1768
void updateReply(const HttpReply::Pointer &)
Definition: FilledChecklist.cc:254
void clientStreamDetach(clientStreamNode *thisObject, ClientHttpRequest *http)
Definition: clientStream.cc:192
err_type FindDenyInfoPage(const Acl::Answer &answer, const bool redirect_allowed)
Definition: Gadgets.cc:34
void identifyFoundObject(StoreEntry *entry, const char *detail)
Definition: client_side_reply.cc:1503
Definition: clientStream.h:75
Definition: HttpHeader.h:50
Definition: HttpRequest.h:48
void removeIrrelevantContentLength()
Some response status codes prohibit sending Content-Length (RFC 7230 section 3.3.2).
Definition: HttpReply.cc:646
String etag
A strong etag of the cached entry. Used for refreshing that entry.
Definition: HttpRequest.h:191
Definition: StoreIOBuffer.h:15
bool requestSatisfactionMode() const
Definition: client_side_request.h:211
void CSD(clientStreamNode *, ClientHttpRequest *)
client stream detach
Definition: clientStreamForward.h:33
bool hasIfNoneMatchEtag(const HttpRequest &request) const
has ETag matching at least one of the If-None-Match etags
Definition: store.cc:1880
void CSR(clientStreamNode *, ClientHttpRequest *)
client stream read
Definition: clientStreamForward.h:30
Definition: client_side_request.h:30
Definition: RequestFlags.h:22
void sendMoreData(StoreIOBuffer result)
Definition: client_side_reply.cc:1950
Http::StatusCode status() const
retrieve the status code for this status line
Definition: StatusLine.h:45
bool mayInitiateCollapsing() const
whether Squid configuration allows us to become a CF initiator
Definition: StoreClient.h:59
void setReplyToReply(HttpReply *reply)
creates a store entry for the reply and appends error reply to it
Definition: client_side_reply.cc:132
Definition: client_side.h:79
int doNfmarkLocalHit(const Comm::ConnectionPointer &conn)
Definition: QosConfig.cc:279
void setReplyToStoreEntry(StoreEntry *e, const char *reason)
replaces current response store entry with the given one
Definition: client_side_reply.cc:151
void detailStoreLookup(const char *detail)
remembers the very first Store lookup classification, ignoring the rest
Definition: client_side_reply.cc:1582
static decltype(::storeClientCopy) storeClientCopy
Definition: client_side_reply.h:137
Definition: RequestMethod.h:26
void handleIMSReply(StoreIOBuffer result)
Definition: client_side_reply.cc:409
void evictIfFound(const cache_key *) override
Definition: Controller.cc:492
clientStream_status_t replyStatus()
Definition: client_side_reply.cc:1122
static void NonBlockingCheck(MakingPointer &&p, ACLCB *cb, void *data)
Definition: FilledChecklist.h:54
ErrorState * clientBuildError(err_type, Http::StatusCode, char const *, const ConnStateData *, HttpRequest *, const AccessLogEntry::Pointer &)
Definition: client_side_reply.cc:2117
struct clientReplyContext::Flags flags
void purgeEntriesByUrl(HttpRequest *req, const char *url)
Definition: client_side_reply.cc:871
void sendBodyTooLargeError()
Definition: client_side_reply.cc:1755
clientReplyContext(ClientHttpRequest *)
Definition: client_side_reply.cc:72
int storeOKTransferDone() const
Definition: client_side_reply.cc:1050
void neighborsHtcpClear(StoreEntry *e, HttpRequest *req, const HttpRequestMethod &method, htcp_clr_reason reason)
Definition: neighbors.cc:1675
SBuf vary_headers
The variant second-stage cache key. Generated from Vary header pattern for this request.
Definition: HttpRequest.h:170
const char * null_string
Definition: forward.h:15
uint64_t size
Response header and body bytes written to the client connection.
Definition: client_side_request.h:153
StoreEntry * storeCreateEntry(const char *url, const char *logUrl, const RequestFlags &flags, const HttpRequestMethod &method)
Definition: store.cc:759
friend CSR clientGetMoreData
Definition: client_side_reply.h:164
bool receivedBodyTooLarge(HttpRequest &, int64_t receivedBodySize)
Definition: HttpReply.cc:557
bool matchesStreamBodyBuffer(const StoreIOBuffer &) const
Definition: client_side_reply.cc:2032
void clientAclChecklistFill(ACLFilledChecklist &checklist, ClientHttpRequest *http)
Definition: client_side.cc:3465
clientStreamNode * getNextNode() const
Definition: client_side_reply.cc:227
Definition: client_side_reply.h:22
const LogTags & loggingTags() const
the processing tags associated with this request transaction.
Definition: client_side_request.h:94
enum Http::_method_t MethodType
bool startCollapsingOn(const StoreEntry &, const bool doingRevalidation) const
Definition: store_client.cc:66
LogTags * loggingTags() const override
Definition: client_side_reply.cc:896
Definition: MemObject.h:33
bool didCollapse
whether startCollapsingOn() was called and returned true
Definition: StoreClient.h:64
Definition: HttpReply.h:24
HttpHeaderEntry * findEntry(Http::HdrType id) const
Definition: HttpHeader.cc:602
Definition: Store.h:37
bool blockedHit() const
whether squid.conf send_hit prevents us from serving this hit
Definition: client_side_reply.cc:848
int doNfmarkLocalMiss(const Comm::ConnectionPointer &conn, const hier_code hierCode)
Definition: QosConfig.cc:251
int cmp(const SBuf &S, const size_type n) const
shorthand version for compare()
Definition: SBuf.h:279
AnyP::ProtocolVersion version
breakdown of protocol version label: (HTTP/ICY) and (0.9/1.0/1.1)
Definition: StatusLine.h:65
bool processConditional()
process conditional request from client
Definition: client_side_reply.cc:794
int storeNotOKTransferDone() const
Definition: client_side_reply.cc:1065
StoreIOBuffer lastStreamBufferedBytes
HTTP response body bytes stored in our Client Stream buffer (if any)
Definition: client_side_reply.h:161
Definition: StoreClient.h:73
void setReplyToError(err_type, Http::StatusCode, char const *, const ConnStateData *, HttpRequest *, const char *, Auth::UserRequest::Pointer)
builds error using clientBuildError() and calls setReplyToError() below
Definition: client_side_reply.cc:93
bool alwaysAllowResponse(Http::StatusCode sline) const
Definition: client_side_reply.cc:1187
const char * storeLookupString(bool found) const
Definition: client_side_reply.h:124
void processOnlyIfCachedMiss()
Definition: client_side_reply.cc:782
AnyP::Port port
destination port of the request that caused serverConnection
Definition: client_side.h:145
LogTags_ot oldType
a set of client protocol, cache use, and other transaction outcome tags
Definition: LogTags.h:96
StoreEntry * storeGetPublic(const char *uri, const HttpRequestMethod &method)
Definition: store.cc:504
bool purgeEntry(StoreEntry &, const Http::MethodType, const char *descriptionPrefix="")
Definition: client_side_reply.cc:989
const char * firstStoreLookup_
Definition: client_side_reply.h:142
int doTosLocalHit(const Comm::ConnectionPointer &conn)
Definition: QosConfig.cc:272
Definition: errorpage.h:88
void clientStreamCallback(clientStreamNode *thisObject, ClientHttpRequest *http, HttpReply *rep, StoreIOBuffer replyBuffer)
Definition: clientStream.cc:150
static ACLCB ProcessReplyAccessResult
Definition: client_side_reply.h:101
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 processReplyAccessResult(const Acl::Answer &accessAllowed)
Definition: client_side_reply.cc:1862
unsigned storelogiccomplete
Definition: client_side_reply.h:82
StoreEntry * loggingEntry() const
Definition: client_side_request.h:65
bool hasParsedReplyHeader() const
whether this entry has access to [deserialized] [HTTP] response headers
Definition: store.cc:231
HttpHeaderEntry * getEntry(HttpHeaderPos *pos) const
Definition: HttpHeader.cc:583
void triggerInitialStoreRead(STCB=SendMoreData)
Definition: client_side_reply.cc:236
void pushStreamData(const StoreIOBuffer &)
Definition: client_side_reply.cc:1735
bool modifiedSince(const time_t ims, const int imslen=-1) const
Definition: store.cc:1836
constexpr bool Less(const A a, const B b)
whether integer a is less than integer b, with correct overflow handling
Definition: SquidMath.h:48
int storeUnregister(store_client *sc, StoreEntry *e, void *data)
Definition: store_client.cc:765
const SBuf & effectiveRequestUri() const
RFC 7230 section 5.5 - Effective Request URI.
Definition: HttpRequest.cc:744
bool hasIfMatchEtag(const HttpRequest &request) const
has ETag matching at least one of the If-Match etags
Definition: store.cc:1873
bool hasEtag(ETag &etag) const
whether this entry has an ETag; if yes, puts ETag value into parameter
Definition: store.cc:1862
void noteStreamBufferredBytes(const StoreIOBuffer &)
Definition: client_side_reply.cc:2049
struct SquidConfig2::@109 onoff
void processReplyAccess()
Definition: client_side_reply.cc:1822
void sendClientUpstreamResponse(const StoreIOBuffer &upstreamResponse)
Definition: client_side_reply.cc:365
void identifyStoreObject()
Definition: client_side_reply.cc:1480
void storeErrorResponse(HttpReply *reply)
Store a prepared error response. MemObject locks the reply object.
Definition: store.cc:1688
Definition: HttpHeader.h:74
CbcPointer< ConnStateData > clientConnectionManager
Definition: HttpRequest.h:232
store_client * storeClientListAdd(StoreEntry *e, void *data)
Definition: store_client.cc:124
AnyP::ProtocolVersion ProtocolVersion(unsigned int aMajor, unsigned int aMinor)
HTTP version label information.
Definition: ProtocolVersion.h:19
static Pointer MakePortful(const AnyP::PortCfgPointer &aPort)
Definition: MasterXaction.h:54
Introduction
- About Squid
- Why Squid?
- Squid Developers
- How to Donate
- How to Help Out
- Getting Squid
- Squid Source Packages
- Squid Deployment Case-Studies
- Squid Software Foundation
Documentation
- Quick Setup
- Configuration:
- FAQ and Wiki
- Guide Books:
- Non-English
- More...
Support
- Security Advisories
- Bugzilla Database
- Mailing lists
- Contacting us
- Commercial services
- Project Sponsors
- Squid-based products