From: Fabian Keil Date: Thu, 25 Jan 2007 14:02:30 +0000 (+0000) Subject: - Add Proxy-Agent header to HTTP snippets that are X-Git-Tag: v_3_0_7~366 X-Git-Url: http://www.privoxy.org/gitweb/new.html?a=commitdiff_plain;h=56dc17c99ceaddd1a6735136fb07813ae0bba4f7;p=privoxy.git - Add Proxy-Agent header to HTTP snippets that are supposed to reach HTTP clients only. - Made a few CONNECT log messages more descriptive. - Catch completely empty server responses (as seen with Tor's fake ".noconnect" top level domain). - Use shiny new "forwarding-failed" template for socks errors. --- diff --git a/jcc.c b/jcc.c index 4cbf24ba..32c1df77 100644 --- a/jcc.c +++ b/jcc.c @@ -1,4 +1,4 @@ -const char jcc_rcs[] = "$Id: jcc.c,v 1.117 2006/12/31 17:56:37 fabiankeil Exp $"; +const char jcc_rcs[] = "$Id: jcc.c,v 1.118 2007/01/07 07:43:43 joergs Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/jcc.c,v $ @@ -6,7 +6,7 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.117 2006/12/31 17:56:37 fabiankeil Exp $" * Purpose : Main file. Contains main() method, main loop, and * the main connection-handling function. * - * Copyright : Written by and Copyright (C) 2001 the SourceForge + * Copyright : Written by and Copyright (C) 2001-2007 the SourceForge * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -33,6 +33,9 @@ const char jcc_rcs[] = "$Id: jcc.c,v 1.117 2006/12/31 17:56:37 fabiankeil Exp $" * * Revisions : * $Log: jcc.c,v $ + * Revision 1.118 2007/01/07 07:43:43 joergs + * AmigaOS4 support added. + * * Revision 1.117 2006/12/31 17:56:37 fabiankeil * Added config option accept-intercepted-requests * and disabled it by default. @@ -907,6 +910,7 @@ const char CHEADER[] = const char CFORBIDDEN[] = "HTTP/1.0 403 Connection not allowable\r\n" + "Proxy-Agent: Privoxy " VERSION "\r\n" "X-Hint: If you read this message interactively, then you know why this happens ,-)\r\n" "Connection: close\r\n\r\n"; @@ -920,11 +924,20 @@ const char GOPHER_RESPONSE[] = "Connection: close\r\n\r\n" "Invalid request. Privoxy doesn't support gopher.\r\n"; +/* XXX: should be a template */ const char MISSING_DESTINATION_RESPONSE[] = "HTTP/1.0 400 Bad request received from browser\r\n" + "Proxy-Agent: Privoxy " VERSION "\r\n" "Connection: close\r\n\r\n" "Bad request. Privoxy was unable to extract the destination.\r\n"; +/* XXX: should be a template */ +const char NO_SERVER_DATA_RESPONSE[] = + "HTTP/1.0 502 Server or forwarder response empty\r\n" + "Proxy-Agent: Privoxy " VERSION "\r\n" + "Connection: close\r\n\r\n" + "Empty server or forwarder response.\r\n" + "The connection was closed without sending any data.\r\n"; #if !defined(_WIN32) && !defined(__OS2__) && !defined(AMIGA) /********************************************************************* @@ -1498,10 +1511,15 @@ static void chat(struct client_state *csp) if (csp->sfd == JB_INVALID_SOCKET) { - log_error(LOG_LEVEL_CONNECT, "connect to: %s failed: %E", - http->hostport); + if (fwd->type != SOCKS_NONE) + { + /* Socks error. */ + rsp = error_response(csp, "forwarding-failed", errno); - if (errno == EINVAL) + log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0", + csp->ip_addr_str, http->ocmd); + } + else if (errno == EINVAL) { rsp = error_response(csp, "no-such-domain", errno); @@ -1512,6 +1530,9 @@ static void chat(struct client_state *csp) { rsp = error_response(csp, "connect-failed", errno); + log_error(LOG_LEVEL_CONNECT, "connect to: %s failed: %E", + http->hostport); + log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0", csp->ip_addr_str, http->ocmd); } @@ -1532,8 +1553,6 @@ static void chat(struct client_state *csp) return; } - log_error(LOG_LEVEL_CONNECT, "OK"); - if (fwd->forward_host || (http->ssl == 0)) { /* write the client's (modified) header to the server @@ -1583,6 +1602,8 @@ static void chat(struct client_state *csp) IOB_RESET(csp); } + log_error(LOG_LEVEL_CONNECT, "to %s successful", http->hostport); + /* we're finished with the client's header */ freez(hdr); @@ -1900,6 +1921,17 @@ static void chat(struct client_state *csp) } } + /* Did we actually get anything? */ + if (NULL == csp->headers->first) + { + 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); + strcpy(buf, NO_SERVER_DATA_RESPONSE); + write_socket(csp->cfd, buf, strlen(buf)); + free_http_request(http); + return; + } + /* we have now received the entire header. * filter it and send the result to the client */ @@ -2688,7 +2720,7 @@ static void listen_loop(void) bfd = bind_port_helper(config); } - log_error(LOG_LEVEL_CONNECT, "accept connection ... "); + log_error(LOG_LEVEL_CONNECT, "Listening for new connections ... "); if (!accept_connection(csp, bfd)) { @@ -2705,7 +2737,7 @@ static void listen_loop(void) } else { - log_error(LOG_LEVEL_CONNECT, "OK"); + log_error(LOG_LEVEL_CONNECT, "accepted connection from %s", csp->ip_addr_str); } #ifdef FEATURE_TOGGLE