ClientRequestContext::~ClientRequestContext()
{
- /*
- * Release our "lock" on our parent, ClientHttpRequest, if we
- * still have one
- */
-
cbdataReferenceDone(http);
delete error;
dlinkDelete(&active, &ClientActiveRequests);
}
-bool
-ClientRequestContext::httpStateIsValid()
-{
- ClientHttpRequest *http_ = http;
-
- if (cbdataReferenceValid(http_))
- return true;
-
- http = nullptr;
-
- cbdataReferenceDone(http_);
-
- return false;
-}
-
#if FOLLOW_X_FORWARDED_FOR
/**
* clientFollowXForwardedForCheck() checks the content of X-Forwarded-For:
clientFollowXForwardedForCheck(Acl::Answer answer, void *data)
{
ClientRequestContext *calloutContext = (ClientRequestContext *) data;
-
- if (!calloutContext->httpStateIsValid())
- return;
-
ClientHttpRequest *http = calloutContext->http;
HttpRequest *request = http->request;
clientAccessCheckDoneWrapper(Acl::Answer answer, void *data)
{
ClientRequestContext *calloutContext = (ClientRequestContext *) data;
-
- if (!calloutContext->httpStateIsValid())
- return;
-
calloutContext->clientAccessCheckDone(answer);
}
clientRedirectDoneWrapper(void *data, const Helper::Reply &result)
{
ClientRequestContext *calloutContext = (ClientRequestContext *)data;
-
- if (!calloutContext->httpStateIsValid())
- return;
-
calloutContext->clientRedirectDone(result);
}
clientStoreIdDoneWrapper(void *data, const Helper::Reply &result)
{
ClientRequestContext *calloutContext = (ClientRequestContext *)data;
-
- if (!calloutContext->httpStateIsValid())
- return;
-
calloutContext->clientStoreIdDone(result);
}
checkNoCacheDoneWrapper(Acl::Answer answer, void *data)
{
ClientRequestContext *calloutContext = (ClientRequestContext *) data;
-
- if (!calloutContext->httpStateIsValid())
- return;
-
calloutContext->checkNoCacheDone(answer);
}
sslBumpAccessCheckDoneWrapper(Acl::Answer answer, void *data)
{
ClientRequestContext *calloutContext = static_cast<ClientRequestContext *>(data);
-
- if (!calloutContext->httpStateIsValid())
- return;
calloutContext->sslBumpAccessCheckDone(answer);
}
void
ClientRequestContext::sslBumpAccessCheckDone(const Acl::Answer &answer)
{
- if (!httpStateIsValid())
- return;
-
const Ssl::BumpMode bumpMode = answer.allowed() ?
static_cast<Ssl::BumpMode>(answer.kind) : Ssl::bumpSplice;
http->sslBumpNeed(bumpMode); // for processRequest() to bump if needed
{
ClientHttpRequest *r = static_cast<ClientHttpRequest*>(data);
debugs(85, 5, "responded to CONNECT: " << r << " ? " << errflag);
-
- assert(r && cbdataReferenceValid(r));
r->sslBumpEstablish(errflag);
}
* Note that ClientRequestContext is created before the first call
* to doCallouts().
*
- * If one of the callouts notices that ClientHttpRequest is no
- * longer valid, it should call cbdataReferenceDone() so that
- * ClientHttpRequest's reference count goes to zero and it will get
- * deleted. ClientHttpRequest will then delete ClientRequestContext.
- *
* Note that we set the _done flags here before actually starting
* the callout. This is strictly for convenience.
*/
}
}
- cbdataReferenceDone(calloutContext->http);
delete calloutContext;
calloutContext = nullptr;
void
ClientHttpRequest::noteAdaptationAnswer(const Adaptation::Answer &answer)
{
- assert(cbdataReferenceValid(this)); // indicates bug
clearAdaptation(virginHeadSource);
assert(!adaptedBodySource);