/*
- * $Id: cache_manager.cc,v 1.31 2003/09/01 03:49:38 robertc Exp $
+ * $Id: cache_manager.cc,v 1.32 2005/09/10 16:03:52 serassio Exp $
*
* DEBUG: section 16 Cache Manager Objects
* AUTHOR: Duane Wessels
if ((mgr = cachemgrParseUrl(storeUrl(entry))) == NULL) {
err = errorCon(ERR_INVALID_URL, HTTP_NOT_FOUND);
err->url = xstrdup(storeUrl(entry));
+ err->request = requestLink(request);
errorAppendEntry(entry, err);
entry->expires = squid_curtime;
return;
/*
- * $Id: forward.cc,v 1.128 2005/06/09 16:04:30 serassio Exp $
+ * $Id: forward.cc,v 1.129 2005/09/10 16:03:52 serassio Exp $
*
* DEBUG: section 17 Request Forwarding
* AUTHOR: Duane Wessels
err->dnsserver_msg = xstrdup(dns_error_message);
- err->request = requestLink(request);
-
fwdFail(fwdState, err);
comm_close(server_fd);
err->port = request->port;
}
- err->request = requestLink(request);
fwdFail(fwdState, err);
if (fs->_peer)
if (entry->isEmpty()) {
err = errorCon(ERR_CONNECT_FAIL, HTTP_GATEWAY_TIMEOUT);
- err->request = requestLink(fwdState->request);
err->xerrno = ETIMEDOUT;
fwdFail(fwdState, err);
/*
debug(50, 4) ("fwdConnectStart: %s\n", xstrerror());
err = errorCon(ERR_SOCKET_FAILURE, HTTP_INTERNAL_SERVER_ERROR);
err->xerrno = errno;
- err->request = requestLink(fwdState->request);
fwdFail(fwdState, err);
fwdStateFree(fwdState);
return;
ErrorState *err;
debug(17, 3) ("fwdStartFail: %s\n", storeUrl(fwdState->entry));
err = errorCon(ERR_CANNOT_FORWARD, HTTP_SERVICE_UNAVAILABLE);
- err->request = requestLink(fwdState->request);
err->xerrno = errno;
fwdFail(fwdState, err);
fwdStateFree(fwdState);
debug(17, 1) ("fwdDispatch: Cannot retrieve '%s'\n",
storeUrl(entry));
err = errorCon(ERR_UNSUP_REQ, HTTP_BAD_REQUEST);
- err->request = requestLink(request);
fwdFail(fwdState, err);
/*
* Force a persistent connection to be closed because
void
fwdFail(FwdState * fwdState, ErrorState * errorState)
{
- assert(EBIT_TEST(fwdState->entry->flags, ENTRY_FWD_HDR_WAIT));
debug(17, 3) ("fwdFail: %s \"%s\"\n\t%s\n",
err_type_str[errorState->type],
httpStatusString(errorState->httpStatus),
errorStateFree(fwdState->err);
fwdState->err = errorState;
+
+ if (!errorState->request)
+ errorState->request = requestLink(fwdState->request);
}
/*
/*
- * $Id: ftp.cc,v 1.364 2005/09/03 10:09:09 serassio Exp $
+ * $Id: ftp.cc,v 1.365 2005/09/10 16:03:52 serassio Exp $
*
* DEBUG: section 9 File Transfer Protocol (FTP)
* AUTHOR: Harvest Derived
err->xerrno = xerrno;
- err->request = requestLink(ftpState->request);
-
err->ftp.server_msg = ftpState->ctrl.message;
ftpState->ctrl.message = NULL;
/*
- * $Id: gopher.cc,v 1.187 2005/05/01 08:11:48 serassio Exp $
+ * $Id: gopher.cc,v 1.188 2005/09/10 16:03:52 serassio Exp $
*
* DEBUG: section 10 Gopher
* AUTHOR: Harvest Derived
StoreEntry *entry = gopherState->entry;
debug(10, 4) ("gopherTimeout: FD %d: '%s'\n", fd, storeUrl(entry));
- if (entry->store_status == STORE_PENDING) {
- if (entry->isEmpty()) {
- fwdFail(gopherState->fwdState,
- errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
- }
- }
+ fwdFail(gopherState->fwdState,
+ errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
comm_close(fd);
}
if (ignoreErrno(errno)) {
do_next_read = 1;
- } else if (entry->isEmpty()) {
+ } else {
ErrorState *err;
err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR);
err->xerrno = errno;
- err->url = xstrdup(storeUrl(entry));
- errorAppendEntry(entry, err);
- comm_close(fd);
- do_next_read = 0;
- } else {
+ fwdFail(gopherState->fwdState, err);
comm_close(fd);
do_next_read = 0;
}
} else if (len == 0 && entry->isEmpty()) {
- ErrorState *err;
- err = errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE);
- err->xerrno = errno;
- err->url = xstrdup(gopherState->request);
- errorAppendEntry(entry, err);
+ fwdFail(gopherState->fwdState, errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE));
comm_close(fd);
do_next_read = 0;
} else if (len == 0) {
if (errflag) {
ErrorState *err;
- err = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE);
+ err = errorCon(ERR_WRITE_ERROR, HTTP_SERVICE_UNAVAILABLE);
err->xerrno = errno;
err->host = xstrdup(gopherState->req->host);
err->port = gopherState->req->port;
err->url = xstrdup(storeUrl(entry));
- errorAppendEntry(entry, err);
+ fwdFail(gopherState->fwdState, err);
comm_close(fd);
if (buf)
/* Parse url. */
gopher_request_parse(fwdState->request,
&gopherState->type_id, gopherState->request);
-#if OLD_PARSE_ERROR_CODE
-
- if (...) {
- ErrorState *err;
- err = errorCon(ERR_INVALID_URL, HTTP_BAD_REQUEST);
- err->url = xstrdup(storeUrl(entry));
- errorAppendEntry(entry, err);
- gopherStateFree(-1, gopherState);
- return;
- }
-
-#endif
comm_add_close_handler(fd, gopherStateFree, gopherState);
if (((gopherState->type_id == GOPHER_INDEX) || (gopherState->type_id == GOPHER_CSO))
/*
- * $Id: http.cc,v 1.455 2005/08/31 19:15:36 wessels Exp $
+ * $Id: http.cc,v 1.456 2005/09/10 16:03:52 serassio Exp $
*
* DEBUG: section 11 Hypertext Transfer Protocol (HTTP)
* AUTHOR: Harvest Derived
debug(11, 4) ("httpTimeout: FD %d: '%s'\n", fd, storeUrl(entry));
if (entry->store_status == STORE_PENDING) {
- if (entry->isEmpty()) {
- fwdFail(httpState->fwd,
- errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
- }
+ fwdFail(httpState->fwd,
+ errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
}
comm_close(fd);
if (ignoreErrno(errno)) {
flags.do_next_read = 1;
- } else if (entry->isEmpty()) {
+ } else {
ErrorState *err;
err = errorCon(ERR_READ_ERROR, HTTP_BAD_GATEWAY);
- err->request = requestLink((HttpRequest *) request);
err->xerrno = errno;
fwdFail(fwd, err);
flags.do_next_read = 0;
comm_close(fd);
- } else {
- flags.do_next_read = 0;
- comm_close(fd);
}
} else if (flag == COMM_OK && len == 0 && entry->isEmpty()) {
- ErrorState *err;
- err = errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_BAD_GATEWAY);
- err->xerrno = errno;
- err->request = requestLink((HttpRequest *) request);
- fwdFail(fwd, err);
+ fwdFail(fwd, errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_BAD_GATEWAY));
eof = 1;
flags.do_next_read = 0;
comm_close(fd);
*/
processReplyHeader(buf, len);
else if (entry->getReply()->sline.status == HTTP_INVALID_HEADER && HttpVersion(0,9) != entry->getReply()->sline.version) {
- ErrorState *err;
- err = errorCon(ERR_INVALID_RESP, HTTP_BAD_GATEWAY);
- err->request = requestLink((HttpRequest *) request);
- fwdFail(fwd, err);
+ fwdFail(fwd, errorCon(ERR_INVALID_RESP, HTTP_BAD_GATEWAY));
flags.do_next_read = 0;
} else {
if (entry->mem_obj->getReply()->sline.status == HTTP_HEADER_TOO_LARGE) {
- ErrorState *err;
storeEntryReset(entry);
- err = errorCon(ERR_TOO_BIG, HTTP_BAD_GATEWAY);
- err->request = requestLink((HttpRequest *) request);
- fwdFail(fwd, err);
+ fwdFail(fwd, errorCon(ERR_TOO_BIG, HTTP_BAD_GATEWAY));
fwd->flags.dont_retry = 1;
} else {
fwdComplete(fwd);
HttpVersion httpver = entry->getReply()->sline.version;
if (s == HTTP_INVALID_HEADER && httpver != HttpVersion(0,9)) {
- ErrorState *err;
storeEntryReset(entry);
- err = errorCon(ERR_INVALID_RESP, HTTP_BAD_GATEWAY);
- err->request = requestLink((HttpRequest *) request);
- fwdFail(fwd, err);
+ fwdFail(fwd, errorCon(ERR_INVALID_RESP, HTTP_BAD_GATEWAY));
comm_close(fd);
return;
}
HttpStateData::SendComplete(int fd, char *bufnotused, size_t size, comm_err_t errflag, void *data)
{
HttpStateData *httpState = static_cast<HttpStateData *>(data);
- StoreEntry *entry = httpState->entry;
- ErrorState *err;
debug(11, 5) ("httpSendComplete: FD %d: size %d: errflag %d.\n",
fd, (int) size, errflag);
#if URL_CHECKSUM_DEBUG
return;
if (errflag) {
+ ErrorState *err;
err = errorCon(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY);
err->xerrno = errno;
- err->request = requestLink(httpState->orig_request);
- errorAppendEntry(entry, err);
+ fwdFail(httpState->fwd, err);
comm_close(fd);
return;
} else {
{
HttpStateData *httpState = static_cast<HttpStateData *>(data);
StoreEntry *entry = httpState->entry;
- ErrorState *err;
debug(11, 5) ("httpSendRequestEntity: FD %d: size %d: errflag %d.\n",
fd, (int) size, errflag);
return;
if (errflag) {
+ ErrorState *err;
err = errorCon(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY);
err->xerrno = errno;
- err->request = requestLink(httpState->orig_request);
- errorAppendEntry(entry, err);
+ fwdFail(httpState->fwd, err);
comm_close(fd);
return;
}
/*
- * $Id: urn.cc,v 1.87 2005/08/31 19:15:36 wessels Exp $
+ * $Id: urn.cc,v 1.88 2005/09/10 16:03:52 serassio Exp $
*
* DEBUG: section 52 URN Parsing
* AUTHOR: Kostas Anagnostakis
debug(52, 3) ("urnStart: Bad uri-res URL %s\n", urlres);
ErrorState *err = errorCon(ERR_URN_RESOLVE, HTTP_NOT_FOUND);
err->url = urlres;
+ err->request = requestLink(r);
urlres = NULL;
errorAppendEntry(entry, err);
return;
/*
- * $Id: wais.cc,v 1.151 2005/08/31 19:15:36 wessels Exp $
+ * $Id: wais.cc,v 1.152 2005/09/10 16:03:52 serassio Exp $
*
* DEBUG: section 24 WAIS Relay
* AUTHOR: Harvest Derived
debug(24, 4) ("waisTimeout: FD %d: '%s'\n", fd, storeUrl(entry));
if (entry->store_status == STORE_PENDING) {
- if (!waisState->dataWritten) {
- fwdFail(waisState->fwd,
- errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
- }
+ fwdFail(waisState->fwd,
+ errorCon(ERR_READ_TIMEOUT, HTTP_GATEWAY_TIMEOUT));
}
comm_close(fd);
comm_read(fd, waisState->buf, read_sz, waisReadReply, waisState);
} else {
ErrorState *err;
- EBIT_CLR(entry->flags, ENTRY_CACHABLE);
- storeReleaseRequest(entry);
err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR);
err->xerrno = errno;
- err->request = requestLink(waisState->request);
- errorAppendEntry(entry, err);
+ fwdFail(waisState->fwd, err);
comm_close(fd);
}
} else if (flag == COMM_OK && len == 0 && !waisState->dataWritten) {
- ErrorState *err;
- err = errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE);
- err->xerrno = errno;
- err->request = requestLink(waisState->request);
- errorAppendEntry(entry, err);
+ fwdFail(waisState->fwd, errorCon(ERR_ZERO_SIZE_OBJECT, HTTP_SERVICE_UNAVAILABLE));
comm_close(fd);
} else if (flag == COMM_OK && len == 0) {
/* Connection closed; retrieval done. */
ErrorState *err;
err = errorCon(ERR_WRITE_ERROR, HTTP_SERVICE_UNAVAILABLE);
err->xerrno = errno;
- err->request = requestLink(waisState->request);
- errorAppendEntry(entry, err);
+ fwdFail(waisState->fwd, err);
comm_close(fd);
} else {
/* Schedule read reply. */
/*
- * $Id: whois.cc,v 1.28 2003/09/01 03:49:40 robertc Exp $
+ * $Id: whois.cc,v 1.29 2005/09/10 16:03:52 serassio Exp $
*
* DEBUG: section 75 WHOIS protocol
* AUTHOR: Duane Wessels, Kostas Anagnostakis
if (ignoreErrno(errno)) {
do_next_read = 1;
- } else if (!dataWritten) {
+ } else {
ErrorState *err;
err = errorCon(ERR_READ_ERROR, HTTP_INTERNAL_SERVER_ERROR);
err->xerrno = errno;
fwdFail(fwd, err);
comm_close(fd);
do_next_read = 0;
- } else {
- comm_close(fd);
- do_next_read = 0;
}
} else {
storeTimestampsSet(entry);