78#if FOLLOW_X_FORWARDED_FOR
80#if !defined(SQUID_X_FORWARDED_FOR_HOP_MAX)
81#define SQUID_X_FORWARDED_FOR_HOP_MAX 64
112 debugs(85,3,
"ClientRequestContext destructed, this=" <<
this);
118 debugs(85, 3,
"ClientRequestContext constructed, this=" <<
this);
177#ifndef FAILURE_MODE_TIME
178#define FAILURE_MODE_TIME 300
188 static double magic_factor = 100.0;
194 n_bad = magic_factor - n_good;
232 debugs(33, 3,
"httpRequestFree: " <<
uri);
266#if FOLLOW_X_FORWARDED_FOR
295 const char *asciiaddr;
312 while (l > 0 && (p[l-1] ==
',' ||
xisspace(p[l-1])))
316 while (l > 0 && ! (p[l-1] ==
',' ||
xisspace(p[l-1])))
319 if ((addr = asciiaddr)) {
379 debugs(85, 3,
"validate IP " << clientConn->
local <<
" possible from Host:");
384 debugs(85, 3,
"FAIL: validate IP " << clientConn->
local <<
" possible from Host:");
444 debugs(85, 3,
"validate skipped with no Host: header present.");
452 debugs(85, 6,
"validate skipped due to internal composite URL.");
459 char *portStr =
nullptr;
462 if (host[0] ==
'[') {
464 portStr = strchr(hostB,
']');
465 if (portStr && *(++portStr) !=
':') {
470 portStr = strrchr(hostB,
':');
476 if (*(++portStr) !=
'\0') {
478 int64_t ret =
strtoll(portStr, &end, 10);
479 if (end == portStr || *end !=
'\0' || ret < 1 || ret > 0xFFFF) {
484 port = (ret & 0xFFFF);
488 debugs(85, 3,
"validate host=" << host <<
", port=" <<
port <<
", portStr=" << (portStr?portStr:
"NULL"));
493 " matches Host: port " <<
port <<
" (" << portStr <<
")");
502 debugs(85, 3,
"validate skipped.");
513 debugs(85, 3,
"FAIL on validate portless URI matches Host: " << portStr);
526 debugs(85, 3,
"validate passed.");
537#if FOLLOW_X_FORWARDED_FOR
560 debugs(0,
DBG_CRITICAL,
"No http_access configuration found. This will block ALL traffic");
577 debugs(85, 2,
"No adapted_http_access configuration. default: ALLOW");
594 http->
uri <<
" is " << answer <<
598 char const *proxy_auth_msg =
"<null>";
614 debugs(33, 5,
"Proxy Auth Message = " << (proxy_auth_msg ? proxy_auth_msg :
"<null>"));
621 if (auth_challenge) {
667 debugs(93,3,
this <<
" adaptationAclCheckDone called");
672 if (
getConn() !=
nullptr &&
getConn()->clientConnection !=
nullptr) {
685 debugs(85,3,
"no adaptation needed");
734 debugs(85, 3,
"access denied expected ERR reply handling: " << answer);
832 while ((e = req_hdr->
getEntry(&pos))) {
835 if (strncasecmp(value,
"NTLM ", 5) == 0
837 strncasecmp(value,
"Negotiate ", 10) == 0
839 strncasecmp(value,
"Kerberos ", 9) == 0) {
863 bool no_cache =
false;
868 if (request->
ims > 0)
886#if USE_HTTP_VIOLATIONS
904 if (request->
range) {
986 debugs(85, 5,
"clientInterpretRequestHeaders: REQ_NOCACHE = " <<
988 debugs(85, 5,
"clientInterpretRequestHeaders: REQ_CACHABLE = " <<
990 debugs(85, 5,
"clientInterpretRequestHeaders: REQ_HIERARCHICAL = " <<
1037 debugs(85,
DBG_IMPORTANT,
"ERROR: URL rewrite helper returned invalid result code. Wrong helper? " << reply);
1056 if (urlNote !=
nullptr) {
1065 if (statusNote !=
nullptr) {
1066 const char * result = statusNote;
1079 debugs(85,
DBG_CRITICAL,
"ERROR: URL-rewrite produces invalid " << status <<
" redirect Location: " << urlNote);
1086 if (urlNote !=
nullptr && strcmp(urlNote,
http->
uri)) {
1090 new_request->
url = tmpUrl;
1094 if (old_request->
body_pipe !=
nullptr) {
1096 debugs(61,2,
"URL-rewriter diverts body_pipe " << new_request->
body_pipe <<
1097 " from request " << old_request <<
" to " << new_request);
1101 old_request =
nullptr;
1104 old_request->
method <<
" " << urlNote <<
" " << old_request->
http_ver);
1145 debugs(85,
DBG_IMPORTANT,
"ERROR: storeID helper returned invalid result code. Wrong helper? " << reply);
1162 if (urlNote !=
nullptr && strcmp(urlNote,
http->
uri) ) {
1164 debugs(85, 9,
"Setting storeID with: " << urlNote );
1223 debugs(85, 5,
"SslBump already decided (" << bumpMode <<
1224 "), " <<
"ignoring ssl_bump for " <<
http->
getConn());
1250 debugs(85, 5,
"cannot SslBump this request");
1258 debugs(85, 5,
"no SslBump during proxy authentication");
1269 debugs(85, 5,
"SslBump possible, checking ACL");
1298 debugs(85, 3,
"closing after Ssl::bumpTerminate ");
1299 clientConn->
close();
1365 debugs(85, 5,
"responded to CONNECT: " << r <<
" ? " << errflag);
1377 debugs(85, 3,
"CONNECT response failure in SslBump: " << errflag);
1396 "-bumped CONNECT tunnel on FD " <<
getConn()->clientConnection);
1403 CommIoCbParams ¶ms = GetCommParams<CommIoCbParams>(bumpCall);
1434 int64_t contentLength =
1436 assert(contentLength >= 0);
1466 if (
const auto csd =
getConn()) {
1467 if (!csd->notes()->empty())
1579 debugs(83, 3,
"Doing calloutContext->hostHeaderVerify()");
1586 debugs(83, 3,
"Doing calloutContext->clientAccessCheck()");
1606 debugs(83, 3,
"Doing calloutContext->clientRedirectStart()");
1614 debugs(83, 3,
"Doing calloutContext->clientAccessCheck2()");
1624 debugs(83, 3,
"Doing calloutContext->clientStoreIdStart()");
1632 debugs(83, 3,
"Doing clientInterpretRequestHeaders()");
1641 debugs(83, 3,
"Doing calloutContext->checkNoCache()");
1663 if (!packetMark.isEmpty())
1667 if (!connmark.isEmpty())
1687 const char *storeUri = storeUriBuf.
c_str();
1698 e->
unlock(
"ClientHttpRequest::doCallouts+sslBumpNeeded");
1713 e->
unlock(
"ClientHttpRequest::doCallouts-sslBumpNeeded");
1721 debugs(83, 3,
"calling processRequest()");
1752 xfree(cleanedRawUri);
1759 const_cast<char *&
>(
log_uri) = aUri;
1771 const SBuf errorUri(aUri);
1799 return multipart ?
mRangeCLen() : firstRange->length;
1807 debugs(85, 3,
"adaptation needed for " <<
this);
1824 switch (answer.
kind) {
1850 debugs(85,3,
"REQMOD reply is HTTP reply");
1853 if (new_rep->body_pipe !=
nullptr) {
1910 if (spaceAvailable < contentSize ) {
1918 if (!spaceAvailable)
1921 if (spaceAvailable < contentSize )
1922 contentSize = spaceAvailable;
1937 debugs(85,
Important(72),
"WARNING: Squid bug 5187 workaround triggered");
1960 debugs(85,4,
this <<
" ends request satisfaction");
1981 debugs(85,3,
"REQMOD body production failed");
1997 debugs(85,3,
"handleAdaptationFailure(" << bypassable <<
")");
2003 if (bypassable && !usedStore && !usedPipe) {
2010 debugs(85,3,
"ICAP REQMOD callout failed, responding with error");
2025 if (
const auto clientConn =
getConn() ?
getConn()->clientConnection :
nullptr) {
2027 debugs(85, 3,
"closing after exception: " << ex.what());
2028 clientConn->close();
2032 debugs(85,
DBG_IMPORTANT,
"ClientHttpRequest exception without connection. Ignoring " << ex.what());
#define ScheduleCallHere(call)
RefCount< AsyncCallT< Dialer > > asyncCall(int aDebugSection, int aDebugLevel, const char *aName, const Dialer &aDialer)
CommCbFunPtrCallT< Dialer > * commCbCall(int debugSection, int debugLevel, const char *callName, const Dialer &dialer)
ErrorDetail::Pointer MakeNamedErrorDetail(const char *name)
const char * errorTypeName(err_type err)
Ip::NfMarkConfig aclFindNfMarkConfig(acl_nfmark *head, ACLChecklist *ch)
Checks for a netfilter mark value to apply depending on the ACL.
tos_t aclMapTOS(acl_tos *head, ACLChecklist *ch)
Checks for a TOS value to apply depending on the ACL.
void UpdateRequestNotes(ConnStateData *csd, HttpRequest &request, NotePairs const &helperNotes)
void httpRequestPack(void *obj, Packable *p)
void SBufToCstring(char *d, const SBuf &s)
int strListIsSubstr(const String *list, const char *s, char del)
SBuf StringToSBuf(const String &s)
create a new SBuf from a String by copying contents
int matchDomainName(const char *h, const char *d, MatchDomainNameFlags flags)
char * urlCanonicalCleanWithoutRequest(const SBuf &url, const HttpRequestMethod &method, const AnyP::UriScheme &scheme)
void fvdbCountVia(const SBuf &)
void fvdbCountForwarded(const SBuf &)
count occurrences of the given X-Forwarded-For header value
err_type FindDenyInfoPage(const Acl::Answer &answer, const bool redirect_allowed)
bool aclIsProxyAuth(const std::optional< SBuf > &name)
void error(char *format,...)
#define cbdataReferenceDone(var)
#define cbdataReference(var)
#define CBDATA_CLASS_INIT(type)
static void NonBlockingCheck(MakingPointer &&p, ACLCB *cb, void *data)
AccessLogEntry::Pointer al
info for the future access.log, and external ACL
void syncAle(HttpRequest *adaptedRequest, const char *logUri) const override
assigns uninitialized adapted_request and url ALE components
AnyP::PortCfgPointer port
Security::CertPointer sslClientCert
cert received from the client
struct timeval start_time
The time the master transaction started.
int bumpMode
whether and how the request was SslBumped
class AccessLogEntry::CacheDetails cache
void syncNotes(HttpRequest *request)
Comm::ConnectionPointer tcpClient
TCP/IP level details about the client connection.
void setVirginUrlForMissingRequest(const SBuf &vu)
Remember Client URI (or equivalent) when there is no HttpRequest.
ProxyProtocol::HeaderPointer proxyProtocolHeader
see ConnStateData::proxyProtocolHeader_
class AccessLogEntry::SslDetails ssl
void updateError(const Error &)
sets (or updates the already stored) transaction error as needed
int kind
the matched custom access list verb (or zero)
const SBuf & lastCheckDescription() const
describes the ACL that was evaluated last while obtaining this answer (for debugging)
bool conflicted() const
whether Squid is uncertain about the allowed() or denied() answer
std::optional< SBuf > lastCheckedName
the name of the ACL (if any) that was evaluated last while obtaining this answer
static bool Start(Method method, VectPoint vp, HttpRequest *req, HttpReply *, const AccessLogEntryPointer &, Adaptation::Initiator *)
summarizes adaptation service answer for the noteAdaptationAnswer() API
Acl::Answer blockedToChecklistAnswer() const
creates an Acl::Answer from akBlock answer
Kind kind
the type of the answer
Http::MessagePointer message
HTTP request or response to forward.
bool final
whether the error, if any, cannot be bypassed
@ akForward
forward the supplied adapted HTTP message
@ akBlock
block or deny the master xaction; see authority
@ akError
no adapted message will come; see bypassable
CbcPointer< Initiate > initiateAdaptation(Initiate *x)
< starts freshly created initiate and returns a safe pointer to it
void clearAdaptation(CbcPointer< Initiate > &x)
clears the pointer (does not call announceInitiatorAbort)
void announceInitiatorAbort(CbcPointer< Initiate > &x)
inform the transaction about abnormal termination and clear the pointer
bool initiated(const CbcPointer< AsyncJob > &job) const
Must(initiated(initiate)) instead of Must(initiate.set()), for clarity.
iterates services in ServiceGroup, starting adaptation launchers
AnyP::UriScheme const & getScheme() const
SBuf & authority(bool requirePort=false) const
void setScheme(const AnyP::ProtocolType &p, const char *str)
convert the URL scheme to that given
static char * cleanup(const char *uri)
void port(const Port p)
reset authority port subcomponent
void host(const char *src)
bool parse(const HttpRequestMethod &, const SBuf &url)
void userInfo(const SBuf &s)
char const * denyMessage(char const *const default_message=nullptr) const
void stopConsumingFrom(RefCount< BodyPipe > &)
const MemBuf & buf() const
uint64_t consumedSize() const
bool setConsumerIfNotLate(const Consumer::Pointer &aConsumer)
int64_t prepPartialResponseGeneration()
ClientHttpRequest(ConnStateData *)
void noteAdaptationAclCheckDone(Adaptation::ServiceGroupPointer) override
void noteMoreBodyDataAvailable(BodyPipe::Pointer) override
struct ClientHttpRequest::Out out
bool request_satisfaction_mode
void clearRequest()
resets the current request and log_uri to nil
HttpRequest *const request
void resumeBodyStorage()
called by StoreEntry when it has more buffer space available
bool receivedWholeAdaptedReply
noteBodyProductionEnded() was called
void noteBodyProductionEnded(BodyPipe::Pointer) override
StoreEntry * loggingEntry_
int64_t mRangeCLen() const
void calloutsError(const err_type, const ErrorDetail::Pointer &)
Build an error reply. For use with the callouts.
void absorbLogUri(char *)
assigns log_uri with aUri without copying the entire C-string
ConnStateData * getConn() const
void endRequestSatisfaction()
String rangeBoundaryStr() const
void initRequest(HttpRequest *)
void setLogUriToRequestUri()
sets log_uri when we know the current request
void checkForInternalAccess()
Checks whether the current request is internal and adjusts it accordingly.
void updateError(const Error &)
if necessary, stores new error information (if any)
CbcPointer< Adaptation::Initiate > virginHeadSource
~ClientHttpRequest() override
void updateLoggingTags(const LogTags_ot code)
update the code in the transaction processing tags
MemObject * memObject() const
void setLogUriToRawUri(const char *, const HttpRequestMethod &)
size_t req_sz
raw request size on input, not current request size
void setErrorUri(const char *)
BodyPipe::Pointer adaptedBodySource
Ssl::BumpMode sslBumpNeed_
whether (and how) the request needs to be bumped
HttpHdrRangeIter range_iter
void noteAdaptationAnswer(const Adaptation::Answer &) override
void handleAdaptedHeader(Http::Message *)
struct ClientHttpRequest::Flags flags
int64_t request_satisfaction_offset
void resetRequest(HttpRequest *)
bool onlyIfCached() const
void resetRequestXXX(HttpRequest *, bool uriChanged)
void callException(const std::exception &) override
called when the job throws during an async call
void assignRequest(HttpRequest *)
StoreEntry * storeEntry() const
void handleAdaptationBlock(const Adaptation::Answer &)
void noteBodyProducerAborted(BodyPipe::Pointer) override
void sslBumpEstablish(Comm::Flag)
bool sslBumpNeeded() const
returns true if and only if the request needs to be bumped
ClientRequestContext * calloutContext
Ssl::BumpMode sslBumpNeed() const
returns raw sslBump mode value
const LogTags & loggingTags() const
the processing tags associated with this request transaction.
void handleAdaptationFailure(const ErrorDetail::Pointer &, bool bypassable=false)
const AccessLogEntry::Pointer al
access.log entry
StoreEntry * loggingEntry() const
void startAdaptation(const Adaptation::ServiceGroupPointer &)
Initiate an asynchronous adaptation transaction which will call us back.
struct ClientHttpRequest::Redirect redirect
void clientAccessCheck2()
bool interpreted_req_hdrs
bool sslBumpAccessCheck()
void clientAccessCheckDone(const Acl::Answer &)
void clientStoreIdDone(const Helper::Reply &)
void clientRedirectDone(const Helper::Reply &)
bool host_header_verify_done
void sslBumpAccessCheckDone(const Acl::Answer &answer)
The callback function for ssl-bump access check list.
void clientRedirectStart()
bool adapted_http_access_done
ClientRequestContext(ClientHttpRequest *)
bool readNextRequest
whether Squid should read after error handling
~ClientRequestContext() override
void checkNoCache()
applies "cache allow/deny" rules, asynchronously if needed
bool adaptation_acl_check_done
ErrorState * error
saved error page for centralized/delayed processing
void hostHeaderVerifyFailed(const char *A, const char *B)
size_t currentXffHopNumber
number of X-Forwarded-For header values processed so far
void clientStoreIdStart()
void hostHeaderIpVerify(const ipcache_addrs *, const Dns::LookupDetails &)
void checkNoCacheDone(const Acl::Answer &)
static void Reset()
forgets the current context, setting it to nil/unknown
Comm::Flag flag
comm layer result status.
Comm::ConnectionPointer conn
Ssl::ServerBump * serverBump()
struct ConnStateData::@29 pinning
bool auth
pinned for www authentication
bool switchedToHttps() const
const ProxyProtocol::HeaderPointer & proxyProtocolHeader() const
Comm::ConnectionPointer serverConnection
void switchToHttps(ClientHttpRequest *, Ssl::BumpMode bumpServerMode)
void setAuth(const Auth::UserRequest::Pointer &aur, const char *cause)
const Auth::UserRequest::Pointer & getAuth() const
Error bareError
a problem that occurred without a request (e.g., while parsing headers)
void expectNoForwarding()
cleans up virgin request [body] forwarding state
struct ConnStateData::@28 flags
Ssl::BumpMode sslBumpMode
ssl_bump decision (Ssl::bumpEnd if n/a).
bool readMore
needs comm_read (for this request or new requests)
AnyP::Port port
destination port of the request that caused serverConnection
void setServerBump(Ssl::ServerBump *srvBump)
static std::ostream & Extra(std::ostream &)
bool have(const Ip::Address &ip, size_t *position=nullptr) const
encapsulates DNS lookup results
void detailError(const ErrorDetail::Pointer &dCode)
set error type-specific detail code
Auth::UserRequest::Pointer auth_user_request
Http::StatusCode httpStatus
err_type category
primary error classification (or ERR_NONE)
void update(const Error &)
if necessary, stores the given error information (if any)
Helper::ResultCode result
The helper response 'result' field.
bool hasNoCache(const String **val=nullptr) const
bool hasOnlyIfCached() const
HttpHdrRange::iterator pos
HttpHdrRange::iterator end
std::vector< HttpHdrRangeSpec * > specs
int64_t lowestOffset(int64_t) const
int64_t bodySize(const HttpRequestMethod &) const
static HttpReplyPointer MakeConnectionEstablished()
construct and return an HTTP/200 (Connection Established) response
bool respMaybeCacheable() const
Http::MethodType id() const
void recordLookup(const Dns::LookupDetails &detail)
CbcPointer< ConnStateData > clientConnectionManager
HttpRequest * clone() const override
Ip::Address indirect_client_addr
String x_forwarded_for_iterator
void detailError(const err_type c, const ErrorDetail::Pointer &d)
sets error detail if no earlier detail was available
NotePairs::Pointer notes()
ConnStateData * pinnedConnection()
void ignoreRange(const char *reason)
forgets about the cached Range header (for a reason)
char * canonicalCleanUrl() const
Auth::UserRequest::Pointer auth_user_request
Error error
the first transaction problem encountered (or falsy)
Adaptation::Icap::History::Pointer icapHistory() const
Returns possibly nil history, creating it if icap logging is enabled.
AnyP::Uri url
the request URI
const SBuf & effectiveRequestUri() const
RFC 7230 section 5.5 - Effective Request URI.
common parts of HttpRequest and HttpReply
BodyPipe::Pointer body_pipe
optional pipeline to receive message body
HttpHdrCc * cache_control
AnyP::ProtocolVersion http_ver
unsigned short port() const
mb_size_t contentSize() const
available data size
void consume(mb_size_t sz)
removes sz bytes and "packs" by moving content left
const HttpReply & baseReply() const
void appendNewOnly(const NotePairs *src)
const char * findFirst(const char *noteKey) const
bool doneFollowXff() const
bool interceptTproxy
Set for requests handled by a "tproxy" port.
bool forceTunnel
whether to forward via TunnelStateData (instead of FwdState)
bool done_follow_x_forwarded_for
void disableCacheUse(const char *reason)
bool connectionAuthDisabled
SupportOrVeto cachable
whether the response may be stored in the cache
void resetWithoutLocking(T *t)
Reset raw pointer - unlock any previous one and save new one without locking.
Comm::ConnectionPointer clientConnection
void stopReading()
cancels Comm::Read() if it is scheduled
acl_access * adapted_http
int log_uses_indirect_client
int acl_uses_indirect_client
struct SquidConfig::@83 Program
struct SquidConfig::@90 onoff
struct SquidConfig::UrlHelperTimeout onUrlRewriteTimeout
struct SquidConfig::@91 accessList
struct SquidConfig::@78 Port
struct SquidConfig::@84 Accel
int global_internal_static
void completeSuccessfully(const char *whyWeAreSureWeStoredTheWholeReply)
size_t bytesWanted(Range< size_t > const aRange, bool ignoreDelayPool=false) const
void completeTruncated(const char *whyWeConsiderTheReplyTruncated)
int unlock(const char *context)
void write(StoreIOBuffer)
void lock(const char *context)
void replaceHttpReply(const HttpReplyPointer &, const bool andStartWriting=true)
void deferProducer(const AsyncCall::Pointer &producer)
call back producer when more buffer space is available
char const * rawBuf() const
void cut(size_type newLength)
char const * termedBuf() const
void veto()
makes decision() false regardless of past or future support() calls
void createStoreEntry(const HttpRequestMethod &m, RequestFlags flags)
void setReplyToStoreEntry(StoreEntry *e, const char *reason)
replaces current response store entry with the given one
void setReplyToError(err_type, Http::StatusCode, char const *, const ConnStateData *, HttpRequest *, const char *, Auth::UserRequest::Pointer)
builds error using clientBuildError() and calls setReplyToError() below
void CSD(clientStreamNode *, ClientHttpRequest *)
client stream detach
void CSR(clientStreamNode *, ClientHttpRequest *)
client stream read
clientStream_status_t CSS(clientStreamNode *, ClientHttpRequest *)
ACLFilledChecklist::MakingPointer clientAclChecklistCreate(const acl_access *acl, ClientHttpRequest *http)
ErrorState * clientBuildError(err_type, Http::StatusCode, char const *, const ConnStateData *, HttpRequest *, const AccessLogEntry::Pointer &)
static void clientInterpretRequestHeaders(ClientHttpRequest *http)
static void clientRedirectAccessCheckDone(Acl::Answer answer, void *data)
static void clientFollowXForwardedForCheck(Acl::Answer answer, void *data)
#define FAILURE_MODE_TIME
static void checkNoCacheDoneWrapper(Acl::Answer, void *)
static void sslBumpAccessCheckDoneWrapper(Acl::Answer, void *)
ErrorState * clientBuildError(err_type, Http::StatusCode, char const *url, const ConnStateData *, HttpRequest *, const AccessLogEntry::Pointer &)
static void hostHeaderIpVerifyWrapper(const ipcache_addrs *ia, const Dns::LookupDetails &dns, void *data)
static void clientCheckPinning(ClientHttpRequest *http)
static int clientHierarchical(ClientHttpRequest *http)
static HLPCB clientStoreIdDoneWrapper
static void clientStoreIdAccessCheckDone(Acl::Answer answer, void *data)
static void checkFailureRatio(err_type, hier_code)
static HLPCB clientRedirectDoneWrapper
static void clientAccessCheckDoneWrapper(Acl::Answer, void *)
static void SslBumpEstablish(const Comm::ConnectionPointer &, char *, size_t, Comm::Flag errflag, int, void *data)
#define SQUID_X_FORWARDED_FOR_HOP_MAX
void tunnelStart(ClientHttpRequest *)
#define debugs(SECTION, LEVEL, CONTENT)
void dlinkDelete(dlink_node *m, dlink_list *list)
void dlinkAdd(void *data, dlink_node *m, dlink_list *list)
dlink_list ClientActiveRequests
@ ERR_SECURE_CONNECT_FAIL
@ ERR_CACHE_ACCESS_DENIED
void fd_note(int fd, const char *s)
char ThisCache2[RFC2181_MAXHOSTNAMELEN<< 1]
int neighbors_do_private_keys
double request_failure_ratio
time_t hit_only_mode_until
void clientStreamRead(clientStreamNode *thisObject, ClientHttpRequest *http, StoreIOBuffer readBuffer)
void errorAppendEntry(StoreEntry *entry, ErrorState *err)
void ipcache_nbgethostbyname(const char *name, IPH *handler, void *handlerData)
const char * bumpMode(int bm)
const char * sslGetUserEmail(SSL *ssl)
void HLPCB(void *, const Helper::Reply &)
void HTTPMSGUNLOCK(M *&a)
void HTTPMSGLOCK(Http::Message *a)
bool ForSomeCacheManager(const SBuf &urlPath)
bool internalStaticCheck(const SBuf &urlPath)
bool internalCheck(const SBuf &urlPath)
const char * internalHostname(void)
bool internalHostnameIs(const SBuf &arg)
bool IsConnOpen(const Comm::ConnectionPointer &conn)
void Write(const Comm::ConnectionPointer &conn, const char *buf, int size, AsyncCall::Pointer &callback, FREE *free_func)
@ scProxyAuthenticationRequired
const HeaderLookupTable_t HeaderLookupTable
bool setNfConnmark(Comm::ConnectionPointer &conn, const ConnectionDirection connDir, const NfMarkConfig &cm)
@ dirAccepted
accepted (from a client by Squid)
Config TheConfig
Globally available instance of Qos::Config.
int setSockTos(const Comm::ConnectionPointer &conn, tos_t tos)
int setSockNfmark(const Comm::ConnectionPointer &conn, nfmark_t mark)
void storeIdStart(ClientHttpRequest *http, HLPCB *handler, void *data)
void redirectStart(ClientHttpRequest *http, HLPCB *handler, void *data)
StoreEntry * storeCreateEntry(const char *url, const char *logUrl, const RequestFlags &flags, const HttpRequestMethod &method)
int64_t strtoll(const char *nptr, char **endptr, int base)
struct timeval current_time
the current UNIX time in timeval {seconds, microseconds} format
char * xstrndup(const char *s, size_t n)