client_side_reply.cc
Go to the documentation of this file.
56 ErrorState *clientBuildError(err_type, Http::StatusCode, char const *, const ConnStateData *, HttpRequest *, const AccessLogEntry::Pointer &);
160 entry->lock("clientReplyContext::setReplyToStoreEntry"); // removeClientStoreReference() unlocks
189 clientReplyContext::removeClientStoreReference(store_client **scp, ClientHttpRequest *aHttpRequest)
356 Comm::ConnectionPointer conn = http->getConn() != NULL ? http->getConn()->clientConnection : NULL;
447 debugs(88, 3, "request to origin aborted '" << http->storeEntry()->url() << "', sending old entry to client");
470 if (http->request->flags.ims && !old_entry->modifiedSince(http->request->ims, http->request->imslen)) {
478 debugs(88, 3, "origin replied 304, revalidated existing entry and sending " << oldStatus << " to client");
489 debugs(88, 3, "origin replied " << status << " but with an older date header, sending old entry (" << oldStatus << ") to client");
503 debugs(88, 3, "origin replied with error " << status << ", forwarding to client due to fail_on_validation_err");
510 debugs(88, 3, "origin replied with error " << status << ", sending old entry (" << oldStatus << ") to client");
592 debugs(33, DBG_IMPORTANT, "clientProcessHit: URL mismatch, '" << e->mem_obj->storeId() << "' != '" << http->request->storeId() << "'");
765 err = clientBuildError(ERR_ACCESS_DENIED, Http::scForbidden, nullptr, http->getConn(), http->request, http->al);
787 Comm::ConnectionPointer conn = http->getConn() != nullptr ? http->getConn()->clientConnection : nullptr;
876 std::unique_ptr<ACLFilledChecklist> chl(clientAclChecklistCreate(Config.accessList.sendHit, http));
1006 clientReplyContext::purgeEntry(StoreEntry &entry, const Http::MethodType methodType, const char *descriptionPrefix)
1008 debugs(88, 4, descriptionPrefix << Http::MethodStr(methodType) << " '" << entry.url() << "'" );
1031 rep->setHeaders(Http::scOkay, NULL, "text/plain", http->request->prefixLen(), 0, squid_curtime);
1143 debugs(88, DBG_IMPORTANT, "WARNING: closing FD " << fd << " to prevent out.size counter overflow");
1152 debugs(88, DBG_IMPORTANT, "WARNING: closing FD " << fd < " to prevent out.offset counter overflow");
1155 debugs(88, DBG_IMPORTANT, "\treceived " << http->out.size << " bytes, offset " << http->out.offset);
1299 if ( !request->peer_login || (strcmp(request->peer_login,"PASS") != 0 && strcmp(request->peer_login,"PASSTHRU") != 0)) {
1344 hdr->putTime(Http::HdrType::EXPIRES, squid_curtime + http->storeEntry()->expires - http->storeEntry()->timestamp);
1349 snprintf(age, sizeof(age), "%" PRId64, static_cast<int64_t>(squid_curtime - http->storeEntry()->timestamp));
1452 Auth::UserRequest::AddReplyAuthHeader(reply, request->auth_user_request, request, http->flags.accel, 0);
1470 if (!Config.onoff.error_pconns && reply->sline.status() >= 400 && !request->flags.mustKeepalive) {
1474 debugs(33, 2, "clientBuildReplyHeader: Connection Keep-Alive not requested by admin or client");
1480 debugs(33, 2, "clientBuildReplyHeader: Connection oriented auth but server side non-persistent");
1515 hdr->putStr(Http::HdrType::CONNECTION, request->flags.proxyKeepalive ? "keep-alive" : "close");
1816 clientReplyContext::errorInStream(StoreIOBuffer const &result, size_t const &sizeToProcess)const
1847 debugs(88, 5, "clientReplyContext::pushStreamData: marking request as complete due to 0 length store result");
2182 const_cast<HttpRequest *&>(http->request) = new HttpRequest(m, AnyP::PROTO_NONE, "http", null_string, mx);
2232 err->src_addr = conn && conn->clientConnection ? conn->clientConnection->remote : Ip::Address::NoAddr();
Definition: parse.c:104
Definition: LogTags.h:67
int storeClientIsThisAClient(store_client *sc, void *someClient)
static DelayId DelayClient(ClientHttpRequest *, HttpReply *reply=nullptr)
Definition: DelayId.cc:67
Definition: FilledChecklist.h:33
void removeClientStoreReference(store_client **scp, ClientHttpRequest *http)
Definition: client_side_reply.cc:189
bool expectedBodyTooLarge(HttpRequest &request)
Definition: HttpReply.cc:525
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:479
void ignoreRange(const char *reason)
forgets about the cached Range header (for a reason)
Definition: HttpRequest.cc:629
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:1624
void traceReply(clientStreamNode *node)
Definition: client_side_reply.cc:1018
Definition: Acl.h:116
ACLFilledChecklist * clientAclChecklistCreate(const acl_access *acl, ClientHttpRequest *http)
Definition: client_side.cc:3585
struct ClientHttpRequest::Redirect redirect
LogTags logType
the processing tags associated with this request transaction.
Definition: client_side_request.h:124
void errorAppendEntry(StoreEntry *entry, ErrorState *err)
Definition: errorpage.cc:716
void sendNotModifiedOrPreconditionFailedError()
Definition: client_side_reply.cc:1927
int varyEvaluateMatch(StoreEntry *entry, HttpRequest *request)
Definition: client_side.cc:3521
const cache_key * storeKeyPublic(const char *url, const HttpRequestMethod &method, const KeyScope keyScope)
Definition: store_key_md5.cc:97
void createStoreEntry(const HttpRequestMethod &m, RequestFlags flags)
Definition: client_side_reply.cc:2169
virtual void fillChecklist(ACLFilledChecklist &) const
configure the ACL checklist with the current transaction state
Definition: client_side_reply.cc:2161
int doTosLocalMiss(const Comm::ConnectionPointer &conn, const hier_code hierCode)
Definition: QosConfig.cc:215
void httpHdrMangleList(HttpHeader *l, HttpRequest *request, const AccessLogEntryPointer &al, req_or_rep_t req_or_rep)
Definition: HttpHeaderTools.cc:326
char tempbuf[HTTP_REQBUF_SZ]
a temporary buffer if we need working storage
Definition: client_side_reply.h:81
void sendStreamError(StoreIOBuffer const &result)
Definition: client_side_reply.cc:1825
void removeStoreReference(store_client **scp, StoreEntry **ep)
Definition: client_side_reply.cc:174
void setReplyToError(err_type, Http::StatusCode, const HttpRequestMethod &, char const *, const ConnStateData *, HttpRequest *, const char *, Auth::UserRequest::Pointer)
builds error using clientBuildError() and calls setReplyToError() below
Definition: client_side_reply.cc:100
struct ClientHttpRequest::Flags flags
clientStream_status_t CSS(clientStreamNode *, ClientHttpRequest *)
Definition: clientStreamForward.h:35
struct ClientHttpRequest::Out out
void replaceHttpReply(const HttpReplyPointer &, const bool andStartWriting=true)
Definition: store.cc:1761
Definition: forward.h:22
CSS esiStreamStatus
CSD esiStreamDetach
static void Start(const Comm::ConnectionPointer &client, StoreEntry *, HttpRequest *, const AccessLogEntryPointer &alp)
Initiates request forwarding to a peer or origin server.
Definition: FwdState.cc:342
void httpHeaderPutStrf(HttpHeader *hdr, Http::HdrType id, const char *fmt,...)
Definition: HttpHeaderTools.cc:53
StoreEntry * storeGetPublicByRequest(HttpRequest *req, const KeyScope keyScope)
Definition: store.cc:533
int refreshCheckHTTP(const StoreEntry *entry, HttpRequest *request)
Definition: refresh.cc:584
bool allowCollapsing(StoreEntry *, const RequestFlags &, const HttpRequestMethod &)
tries to make the entry available for collapsing future requests
Definition: Controller.cc:758
CollapsedRevalidation collapsedRevalidation
Definition: client_side_reply.h:153
StoreEntry * storeGetPublicByRequestMethod(HttpRequest *req, const HttpRequestMethod &method, const KeyScope keyScope)
Definition: store.cc:527
class AccessLogEntry::HttpDetails http
void sendPreconditionFailedError()
send 412 (Precondition Failed) to client
Definition: client_side_reply.cc:1883
void clientStreamDetach(clientStreamNode *thisObject, ClientHttpRequest *http)
Definition: clientStream.cc:193
void identifyFoundObject(StoreEntry *entry, const char *detail)
Definition: client_side_reply.cc:1597
Definition: clientStream.h:76
Definition: HttpHeader.h:51
Definition: HttpRequest.h:49
void removeIrrelevantContentLength()
Some response status codes prohibit sending Content-Length (RFC 7230 section 3.3.2).
Definition: HttpReply.cc:672
struct SquidConfig::@113 onoff
String etag
A strong etag of the cached entry. Used for refreshing that entry.
Definition: HttpRequest.h:191
Definition: StoreIOBuffer.h:16
bool requestSatisfactionMode() const
Definition: client_side_request.h:210
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:1920
void CSR(clientStreamNode *, ClientHttpRequest *)
client stream read
Definition: clientStreamForward.h:30
Definition: client_side_request.h:38
err_type aclGetDenyInfoPage(AclDenyInfoList **head, const char *name, int redirect_allowed)
Definition: Gadgets.cc:41
bool errorInStream(StoreIOBuffer const &result, size_t const &sizeToProcess) const
Definition: client_side_reply.cc:1816
Definition: RequestFlags.h:21
void sendMoreData(StoreIOBuffer result)
Definition: client_side_reply.cc:2077
Http::StatusCode status() const
retrieve the status code for this status line
Definition: StatusLine.h:45
int clientHttpRequestStatus(int fd, ClientHttpRequest const *http)
Definition: client_side_reply.cc:1139
bool mayInitiateCollapsing() const
whether Squid configuration allows us to become a CF initiator
Definition: StoreClient.h:46
void pushStreamData(StoreIOBuffer const &result, char *source)
Definition: client_side_reply.cc:1842
void setReplyToReply(HttpReply *reply)
creates a store entry for the reply and appends error reply to it
Definition: client_side_reply.cc:139
Definition: client_side.h:79
int doNfmarkLocalHit(const Comm::ConnectionPointer &conn)
Definition: QosConfig.cc:264
void putWarning(const int code, const char *const text)
add a Warning header
Definition: HttpHeader.cc:1147
void setReplyToStoreEntry(StoreEntry *e, const char *reason)
replaces current response store entry with the given one
Definition: client_side_reply.cc:158
void detailStoreLookup(const char *detail)
remembers the very first Store lookup classification, ignoring the rest
Definition: client_side_reply.cc:1676
Definition: RequestMethod.h:27
void handleIMSReply(StoreIOBuffer result)
Definition: client_side_reply.cc:420
virtual void evictIfFound(const cache_key *) override
Definition: Controller.cc:513
clientStream_status_t replyStatus()
Definition: client_side_reply.cc:1183
ErrorState * clientBuildError(err_type, Http::StatusCode, char const *, const ConnStateData *, HttpRequest *, const AccessLogEntry::Pointer &)
Definition: client_side_reply.cc:2228
struct clientReplyContext::Flags flags
void purgeEntriesByUrl(HttpRequest *req, const char *url)
Definition: client_side_reply.cc:890
void sendBodyTooLargeError()
Definition: client_side_reply.cc:1870
CSR esiStreamRead
clientReplyContext(ClientHttpRequest *)
Definition: client_side_reply.cc:75
int storeOKTransferDone() const
Definition: client_side_reply.cc:1073
void neighborsHtcpClear(StoreEntry *e, HttpRequest *req, const HttpRequestMethod &method, htcp_clr_reason reason)
Definition: neighbors.cc:1807
SBuf vary_headers
The variant second-stage cache key. Generated from Vary header pattern for this request.
Definition: HttpRequest.h:170
CSCB esiProcessStream
const char * null_string
Definition: RefCount.h:27
struct StoreIOBuffer::@149 flags
uint64_t size
Response header and body bytes written to the client connection.
Definition: client_side_request.h:113
StoreEntry * storeCreateEntry(const char *url, const char *logUrl, const RequestFlags &flags, const HttpRequestMethod &method)
Definition: store.cc:782
bool receivedBodyTooLarge(HttpRequest &, int64_t receivedBodySize)
Definition: HttpReply.cc:517
void clientAclChecklistFill(ACLFilledChecklist &checklist, ClientHttpRequest *http)
Definition: client_side.cc:3593
clientStreamNode * getNextNode() const
Definition: client_side_reply.cc:244
Definition: client_side_reply.h:23
enum Http::_method_t MethodType
void clientStreamInsertHead(dlink_list *list, CSR *func, CSCB *callback, CSD *detach, CSS *status, ClientStreamData data)
Definition: clientStream.cc:131
bool startCollapsingOn(const StoreEntry &, const bool doingRevalidation) const
Definition: store_client.cc:66
Definition: MemObject.h:33
Definition: HttpReply.h:25
HttpHeaderEntry * findEntry(Http::HdrType id) const
Definition: HttpHeader.cc:646
Definition: Store.h:42
bool blockedHit() const
whether squid.conf send_hit prevents us from serving this hit
Definition: client_side_reply.cc:866
int doNfmarkLocalMiss(const Comm::ConnectionPointer &conn, const hier_code hierCode)
Definition: QosConfig.cc:236
int cmp(const SBuf &S, const size_type n) const
shorthand version for compare()
Definition: SBuf.h:264
struct SquidConfig::@114 accessList
AnyP::ProtocolVersion version
breakdown of protocol version label: (HTTP/ICY) and (0.9/1.0/1.1)
Definition: StatusLine.h:70
void triggerInitialStoreRead()
Definition: client_side_reply.cc:253
void updateOnNotModified(StoreEntry *old, StoreEntry &e304)
using a 304 response, update the old entry (metadata and reply headers)
Definition: Controller.cc:725
virtual LogTags * loggingTags() const
Definition: client_side_reply.cc:913
int storeNotOKTransferDone() const
Definition: client_side_reply.cc:1089
bool processConditional(StoreIOBuffer &result)
process conditional request from client
Definition: client_side_reply.cc:812
size_t HttpReply *STUB StoreEntry const KeyScope scope const HttpRequestMethod & method
Definition: stub_store.cc:105
Definition: StoreClient.h:58
#define Must(condition)
Like assert() but throws an exception instead of aborting the process.
Definition: TextException.h:72
bool alwaysAllowResponse(Http::StatusCode sline) const
Definition: client_side_reply.cc:1249
struct SquidConfig2::@128 onoff
const char * storeLookupString(bool found) const
Definition: client_side_reply.h:126
void processOnlyIfCachedMiss()
Definition: client_side_reply.cc:800
LogTags_ot oldType
a set of client protocol, cache use, and other transaction outcome tags
Definition: LogTags.h:93
StoreEntry * storeGetPublic(const char *uri, const HttpRequestMethod &method)
Definition: store.cc:521
bool purgeEntry(StoreEntry &, const Http::MethodType, const char *descriptionPrefix="")
Definition: client_side_reply.cc:1006
const char * firstStoreLookup_
Definition: client_side_reply.h:137
int doTosLocalHit(const Comm::ConnectionPointer &conn)
Definition: QosConfig.cc:257
Definition: errorpage.h:87
void clientStreamCallback(clientStreamNode *thisObject, ClientHttpRequest *http, HttpReply *rep, StoreIOBuffer replyBuffer)
Definition: clientStream.cc:150
static ACLCB ProcessReplyAccessResult
Definition: client_side_reply.h:105
void setHeaders(Http::StatusCode status, const char *reason, const char *ctype, int64_t clen, time_t lmt, time_t expires)
Definition: HttpReply.cc:168
void processReplyAccessResult(const Acl::Answer &accessAllowed)
Definition: client_side_reply.cc:1981
unsigned storelogiccomplete
Definition: client_side_reply.h:86
StoreEntry * loggingEntry() const
Definition: client_side_request.h:62
HttpHeaderEntry * getEntry(HttpHeaderPos *pos) const
Definition: HttpHeader.cc:627
bool modifiedSince(const time_t ims, const int imslen=-1) const
Definition: store.cc:1876
int storeUnregister(store_client *sc, StoreEntry *e, void *data)
Definition: store_client.cc:687
const SBuf & effectiveRequestUri() const
RFC 7230 section 5.5 - Effective Request URI.
Definition: HttpRequest.cc:688
void addVia(const AnyP::ProtocolVersion &ver, const HttpHeader *from=0)
Definition: HttpHeader.cc:1014
bool hasIfMatchEtag(const HttpRequest &request) const
has ETag matching at least one of the If-Match etags
Definition: store.cc:1913
void storeClientCopy(store_client *sc, StoreEntry *e, StoreIOBuffer copyInto, STCB *callback, void *data)
Definition: store_client.cc:223
bool hasEtag(ETag &etag) const
whether this entry has an ETag; if yes, puts ETag value into parameter
Definition: store.cc:1902
void processReplyAccess()
Definition: client_side_reply.cc:1937
void nonBlockingCheck(ACLCB *callback, void *callback_data)
Definition: Checklist.cc:238
void identifyStoreObject()
Definition: client_side_reply.cc:1577
void sendClientUpstreamResponse()
Definition: client_side_reply.cc:372
void storeErrorResponse(HttpReply *reply)
Store a prepared error response. MemObject locks the reply object.
Definition: store.cc:1744
Definition: HttpHeader.h:72
CbcPointer< ConnStateData > clientConnectionManager
Definition: HttpRequest.h:232
store_client * storeClientListAdd(StoreEntry *e, void *data)
Definition: store_client.cc:136
AnyP::ProtocolVersion ProtocolVersion(unsigned int aMajor, unsigned int aMinor)
HTTP version label information.
Definition: ProtocolVersion.h:19
Definition: MasterXaction.h:40