X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=cgi.c;h=5c26086420eed4c8e36730631953fabcebce6bea;hb=b64613e1426a856490e86e67052f094fc8b09b75;hp=efff693c5fbfdf78a41d383dfb80b16b5d87f8a7;hpb=e72b401da5537a14b29e945944926373cb251825;p=privoxy.git diff --git a/cgi.c b/cgi.c index efff693c..5c260864 100644 --- a/cgi.c +++ b/cgi.c @@ -1,4 +1,4 @@ -const char cgi_rcs[] = "$Id: cgi.c,v 1.116 2009/03/15 14:59:34 fabiankeil Exp $"; +const char cgi_rcs[] = "$Id: cgi.c,v 1.123 2009/06/11 11:49:11 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgi.c,v $ @@ -62,12 +62,12 @@ const char cgi_rcs[] = "$Id: cgi.c,v 1.116 2009/03/15 14:59:34 fabiankeil Exp $" #if defined(FEATURE_CGI_EDIT_ACTIONS) || defined(FEATURE_TOGGLE) #include "cgiedit.h" #endif /* defined(FEATURE_CGI_EDIT_ACTIONS) || defined (FEATURE_TOGGLE) */ -#include "loadcfg.h" + /* loadcfg.h is for global_toggle_state only */ -#ifdef FEATURE_PTHREAD -#include "jcc.h" +#include "loadcfg.h" /* jcc.h is for mutex semaphore globals only */ -#endif /* def FEATURE_PTHREAD */ +#include "jcc.h" + const char cgi_h_rcs[] = CGI_H_VERSION; /* @@ -815,15 +815,13 @@ jb_err get_number_param(struct client_state *csp, * Parameters : * 1 : csp = Current client state (buffers, headers, etc...) * 2 : templatename = Which template should be used for the answer - * 3 : sys_err = system error number * * Returns : A http_response. If we run out of memory, this * will be cgi_error_memory(). * *********************************************************************/ struct http_response *error_response(struct client_state *csp, - const char *templatename, - int sys_err) + const char *templatename) { jb_err err; struct http_response *rsp; @@ -856,7 +854,6 @@ struct http_response *error_response(struct client_state *csp, if (!err) err = map(exports, "host", 1, html_encode(csp->http->host), 0); if (!err) err = map(exports, "hostport", 1, html_encode(csp->http->hostport), 0); if (!err) err = map(exports, "path", 1, html_encode_and_free_original(path), 0); - if (!err) err = map(exports, "error", 1, html_encode_and_free_original(safe_strerror(sys_err)), 0); if (!err) err = map(exports, "protocol", 1, csp->http->ssl ? "https://" : "http://", 1); if (!err) { @@ -879,12 +876,6 @@ struct http_response *error_response(struct client_state *csp, 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; } else if (!strcmp(templatename, "forwarding-failed")) @@ -939,27 +930,38 @@ struct http_response *error_response(struct client_state *csp, 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->status = strdup("503 Forwarding failure"); rsp->reason = RSP_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; } + else if (!strcmp(templatename, "connection-timeout")) + { + 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) + { + free_map(exports); + free_http_response(rsp); + return cgi_error_memory(); + } err = template_fill_for_cgi(csp, templatename, exports, rsp); if (err) @@ -1409,7 +1411,7 @@ void get_http_time(int time_offset, char *buf, size_t buffer_size) /* get and save the gmt */ #if HAVE_GMTIME_R t = gmtime_r(¤t_time, &dummy); -#elif FEATURE_PTHREAD +#elif defined(MUTEX_LOCKS_AVAILABLE) privoxy_mutex_lock(&gmtime_mutex); t = gmtime(¤t_time); privoxy_mutex_unlock(&gmtime_mutex); @@ -1465,7 +1467,7 @@ static void get_locale_time(char *buf, size_t buffer_size) #if HAVE_LOCALTIME_R timeptr = localtime_r(¤t_time, &dummy); -#elif FEATURE_PTHREAD +#elif defined(MUTEX_LOCKS_AVAILABLE) privoxy_mutex_lock(&localtime_mutex); timeptr = localtime(¤t_time); privoxy_mutex_unlock(&localtime_mutex);