-const char cgi_rcs[] = "$Id: cgi.c,v 1.120 2009/06/11 11:44:25 fabiankeil Exp $";
+const char cgi_rcs[] = "$Id: cgi.c,v 1.128 2010/04/21 20:48:06 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/cgi.c,v $
if (!err)
{
/* It worked */
- rsp->reason = RSP_REASON_CGI_CALL;
+ rsp->crunch_reason = CGI_CALL;
return finish_http_response(csp, rsp);
}
else
if (!strcmp(templatename, "no-such-domain"))
{
rsp->status = strdup("404 No such domain");
- if (rsp->status == NULL)
- {
- free_map(exports);
- free_http_response(rsp);
- return cgi_error_memory();
- }
- rsp->reason = RSP_REASON_NO_SUCH_DOMAIN;
+ rsp->crunch_reason = NO_SUCH_DOMAIN;
}
else if (!strcmp(templatename, "forwarding-failed"))
{
if (!err) err = map(exports, "forwarding-type", 1, socks_type, 1);
if (!err) err = map(exports, "error-message", 1, html_encode(csp->error_message), 0);
-
- if (!err) rsp->status = strdup("503 Forwarding failure");
- if ((rsp->status == NULL) || (NULL == csp->error_message) || err)
+ if ((NULL == csp->error_message) || err)
{
free_map(exports);
free_http_response(rsp);
return cgi_error_memory();
}
- rsp->reason = RSP_REASON_FORWARDING_FAILED;
+
+ rsp->status = strdup("503 Forwarding failure");
+ rsp->crunch_reason = FORWARDING_FAILED;
}
else if (!strcmp(templatename, "connect-failed"))
{
rsp->status = strdup("503 Connect failed");
- if (rsp->status == NULL)
- {
- free_map(exports);
- free_http_response(rsp);
- return cgi_error_memory();
- }
- rsp->reason = RSP_REASON_CONNECT_FAILED;
+ rsp->crunch_reason = CONNECT_FAILED;
}
else if (!strcmp(templatename, "connection-timeout"))
{
rsp->status = strdup("504 Connection timeout");
- /* XXX: This check should be factored out of this block */
- if (rsp->status == NULL)
- {
- free_map(exports);
- free_http_response(rsp);
- return cgi_error_memory();
- }
- rsp->reason = RSP_REASON_CONNECTION_TIMEOUT;
+ rsp->crunch_reason = CONNECTION_TIMEOUT;
+ }
+ else if (!strcmp(templatename, "no-server-data"))
+ {
+ rsp->status = strdup("502 No data received from server or forwarder");
+ rsp->crunch_reason = NO_SERVER_DATA;
+ }
+
+ if (rsp->status == NULL)
+ {
+ free_map(exports);
+ free_http_response(rsp);
+ return cgi_error_memory();
}
err = template_fill_for_cgi(csp, templatename, exports, rsp);
strlen(cgi_error_memory_response->head);
cgi_error_memory_response->content_length =
strlen(cgi_error_memory_response->body);
- cgi_error_memory_response->reason = RSP_REASON_OUT_OF_MEMORY;
+ cgi_error_memory_response->crunch_reason = OUT_OF_MEMORY;
}
rsp->content_length = 0;
rsp->head_length = 0;
rsp->is_static = 0;
- rsp->reason = RSP_REASON_INTERNAL_ERROR;
+ rsp->crunch_reason = INTERNAL_ERROR;
snprintf(errnumbuf, sizeof(errnumbuf), "%d", error_to_report);
string_join (&result, string_toupper(item));
string_append(&result, "\">");
string_append(&result, item);
- string_append(&result, "</a> ");
+ string_append(&result, "</a>");
return result;
}
if (!err) err = enlist_unique_header(rsp->headers, "Date", buf);
if (!strncmpic(rsp->status, "403", 3)
|| !strncmpic(rsp->status, "404", 3)
- || !strncmpic(rsp->status, "503", 3))
+ || !strncmpic(rsp->status, "502", 3)
+ || !strncmpic(rsp->status, "503", 3)
+ || !strncmpic(rsp->status, "504", 3))
{
if (!err) err = enlist_unique_header(rsp->headers, "Last-Modified", "Wed, 08 Jun 1955 12:00:00 GMT");
}
if (!err) err = enlist_unique_header(rsp->headers, "Pragma", "no-cache");
}
- /*
- * Quoting RFC 2616:
- *
- * HTTP/1.1 applications that do not support persistent connections MUST
- * include the "close" connection option in every message.
- */
- if (!err) err = enlist_unique_header(rsp->headers, "Connection", "close");
+ if (!err && !(csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE))
+ {
+ err = enlist_unique_header(rsp->headers, "Connection", "close");
+ }
/*
* Write the head