From: Fabian Keil <fk@fabiankeil.de> Date: Thu, 11 Jun 2009 11:49:11 +0000 (+0000) Subject: Send a template-based response in case of prematurely closed connections. X-Git-Tag: v_3_0_13~28 X-Git-Url: http://www.privoxy.org/gitweb/@default-cgi@/faq/%22https:/static/@default-cgi@show-url-info?a=commitdiff_plain;h=effa99e4df3dbc95aafd3dd940c0454ca0a2ce44;p=privoxy.git Send a template-based response in case of prematurely closed connections. --- diff --git a/cgi.c b/cgi.c index ee25909e..20f2fc42 100644 --- a/cgi.c +++ b/cgi.c @@ -1,4 +1,4 @@ -const char cgi_rcs[] = "$Id: cgi.c,v 1.121 2009/06/11 11:46:22 fabiankeil Exp $"; +const char cgi_rcs[] = "$Id: cgi.c,v 1.122 2009/06/11 11:47:16 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgi.c,v $ @@ -950,6 +950,11 @@ struct http_response *error_response(struct client_state *csp, rsp->status = strdup("504 Connection timeout"); rsp->reason = RSP_REASON_CONNECTION_TIMEOUT; } + else if (!strcmp(templatename, "no-server-data")) + { + rsp->status = strdup("502 No data received from server or forwarder"); + rsp->reason = RSP_REASON_NO_SERVER_DATA; + } if (rsp->status == NULL) { diff --git a/jcc.c b/jcc.c index cc37def1..de6d35b2 100644 --- a/jcc.c +++ b/jcc.c @@ -1,4 +1,4 @@ -const char jcc_rcs[] = "$Id: jcc.c,v 1.254 2009/06/11 11:44:25 fabiankeil Exp $"; +const char jcc_rcs[] = "$Id: jcc.c,v 1.255 2009/06/11 11:46:22 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/jcc.c,v $ @@ -236,15 +236,6 @@ static const char MISSING_DESTINATION_RESPONSE[] = "Connection: close\r\n\r\n" "Bad request. Privoxy was unable to extract the destination.\r\n"; -/* XXX: should be a template */ -static const char NO_SERVER_DATA_RESPONSE[] = - "HTTP/1.0 502 Server or forwarder response empty\r\n" - "Proxy-Agent: Privoxy " VERSION "\r\n" - "Content-Type: text/plain\r\n" - "Connection: close\r\n\r\n" - "Empty server or forwarder response.\r\n" - "The connection has been closed but Privoxy didn't receive any data.\r\n"; - /* XXX: should be a template */ static const char INVALID_SERVER_HEADERS_RESPONSE[] = "HTTP/1.0 502 Server or forwarder response invalid\r\n" @@ -2099,7 +2090,7 @@ static void chat(struct client_state *csp) { log_error(LOG_LEVEL_ERROR, "Empty server or forwarder response."); log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 502 0", csp->ip_addr_str, http->cmd); - write_socket(csp->cfd, NO_SERVER_DATA_RESPONSE, strlen(NO_SERVER_DATA_RESPONSE)); + send_crunch_response(csp, error_response(csp, "no-server-data")); free_http_request(http); mark_server_socket_tainted(csp); return; diff --git a/project.h b/project.h index 71357600..4d0d9863 100644 --- a/project.h +++ b/project.h @@ -1,7 +1,7 @@ #ifndef PROJECT_H_INCLUDED #define PROJECT_H_INCLUDED /** Version string. */ -#define PROJECT_H_VERSION "$Id: project.h,v 1.140 2009/06/08 16:47:07 fabiankeil Exp $" +#define PROJECT_H_VERSION "$Id: project.h,v 1.141 2009/06/11 11:46:22 fabiankeil Exp $" /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/project.h,v $ @@ -319,6 +319,7 @@ struct http_request #define RSP_REASON_OUT_OF_MEMORY 9 #define RSP_REASON_INTERNAL_ERROR 10 #define RSP_REASON_CONNECTION_TIMEOUT 11 +#define RSP_REASON_NO_SERVER_DATA 12 /** * Response generated by CGI, blocker, or error handler diff --git a/templates/no-server-data b/templates/no-server-data new file mode 100644 index 00000000..f752476c --- /dev/null +++ b/templates/no-server-data @@ -0,0 +1,95 @@ +########################################################## +# +# no-server-data Error Output template for Privoxy. +# +########################################################## +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + +<head> + <title>502 - No server or forwarder data received (Privoxy@@my-hostname@)</title> + <meta http-equiv="Content-Style-Type" content="text/css"> + <meta http-equiv="Content-Script-Type" content="text/javascript"> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <meta name="robots" content="noindex,nofollow"> + <link rel="shortcut icon" href="@default-cgi@error-favicon.ico"> + <style type="text/css"> +#include cgi-style.css + </style> +</head> + +<body> + + <table summary="" cellpadding="20" cellspacing="10" border="0" width="100%"> + <tr> + <td class="status"> + 502 + </td> + <td class="title" style="width: 100%"> + +#include mod-title + + </td> + </tr> + +<!-- @if-unstable-start --> +# This will only appear if CODE_STATUS is "alpha" or "beta". See configure.in + <tr> + <td class="warning" colspan="2"> + +#include mod-unstable-warning + + </td> + </tr> +<!-- if-unstable-end@ --> + + <tr> + <td class="warning" colspan=2> + <h2>No server or forwarder data received</h2> + <p>Your request for <a href="@protocol@@hostport@@path@"><b>@protocol@@hostport@@path@</b></a> + could not be fulfilled, because the connection to <b>@host@</b> (@host-ip@) has been closed + before Privoxy received any data for this request. + </p> + <p>This is often a temporary failure, so you might just + <a href="@protocol@@hostport@@path@">try again</a>. + </p> + <p> + If you get this message very often, consider disabling + <a href="@user-manual@config.html#CONNECTION-SHARING">connection-sharing</a> + (which should be off by default). If that doesn't help, you may have to additionally + disable support for connection keep-alive by setting + <a href="@user-manual@config.html#KEEP-ALIVE-TIMEOUT">keep-alive-timeout</a> + to 0. + </p> + </td> + </tr> + + <tr> + <td class="box" colspan="2"> + <h2>More Privoxy:</h2> + <ul>@menu@<li><a href="@user-manual@">Documentation</a></li></ul> + </td> + </tr> + + <tr> + <td class="info" colspan="2"> + +#include mod-support-and-service + + </td> + </tr> + +<!-- @if-have-help-info-start --> + <tr> + <td class="info" colspan="2"> + +#include mod-local-help + + </td> + </tr> +<!-- if-have-help-info-end@ --> + + </table> + +</body> +</html>