X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=parsers.c;h=eef1fd613bd427503a26893df9e21663fe9afdcf;hb=68804878a2e22c8ff9393a157ddfd8c050bf6cf3;hp=017ec4b28129d9b72fcc84b78474d6f3aa347923;hpb=6f5fc70c4f3d58be43b79749304d5d8a1df96f0f;p=privoxy.git diff --git a/parsers.c b/parsers.c index 017ec4b2..eef1fd61 100644 --- a/parsers.c +++ b/parsers.c @@ -1,4 +1,4 @@ -const char parsers_rcs[] = "$Id: parsers.c,v 1.32 2001/10/07 15:43:28 oes Exp $"; +const char parsers_rcs[] = "$Id: parsers.c,v 1.35 2001/10/09 22:39:21 jongfoster Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/parsers.c,v $ @@ -41,6 +41,18 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.32 2001/10/07 15:43:28 oes Exp $" * * Revisions : * $Log: parsers.c,v $ + * Revision 1.35 2001/10/09 22:39:21 jongfoster + * assert.h is also required under Win32, so moving out of #ifndef _WIN32 + * block. + * + * Revision 1.34 2001/10/07 18:50:55 oes + * Added server_content_encoding, renamed server_transfer_encoding + * + * Revision 1.33 2001/10/07 18:04:49 oes + * Changed server_http11 to server_http and its pattern to "HTTP". + * Additional functionality: it now saves the HTTP status into + * csp->http->status and sets CT_TABOO for Status 206 (partial range) + * * Revision 1.32 2001/10/07 15:43:28 oes * Removed FEATURE_DENY_GZIP and replaced it with client_accept_encoding, * client_te and client_accept_encoding_adder, triggered by the new @@ -283,9 +295,9 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.32 2001/10/07 15:43:28 oes Exp $" #include #include #include -#include #endif +#include #include #ifndef _WIN32 @@ -329,9 +341,7 @@ const struct parsers client_patterns[] = { #if defined(FEATURE_IMAGE_DETECT_MSIE) { "Accept:", 7, client_accept }, #endif /* defined(FEATURE_IMAGE_DETECT_MSIE) */ -#ifdef FEATURE_FORCE_LOAD - { "Host:", 5, client_host }, -#endif /* def FEATURE_FORCE_LOAD */ + { "Host:", 5, crumble }, /* { "if-modified-since:", 18, crumble }, */ { "Keep-Alive:", 11, crumble }, { "connection:", 11, crumble }, @@ -347,13 +357,15 @@ const struct parsers server_patterns[] = { { "Content-Type:", 13, server_content_type }, { "Content-Length:", 15, server_content_length }, { "Content-MD5:", 12, server_content_md5 }, - { "Transfer-Encoding:", 18, server_transfer_encoding }, + { "Content-Encoding:", 17, server_content_encoding }, + { "Transfer-Encoding:", 18, server_transfer_coding }, { "Keep-Alive:", 11, crumble }, { NULL, 0, NULL } }; void (* const add_client_headers[])(struct client_state *) = { + client_host_adder, client_cookie_adder, client_x_forwarded_adder, client_xtra_adder, @@ -818,10 +830,10 @@ char *server_content_type(const struct parsers *v, const char *s, struct client_ /********************************************************************* * - * Function : server_transfer_encoding + * Function : server_transfer_coding * - * Description : - Prohibit filtering (CT_TABOO) if encoding compresses - * - Raise the CSP_FLAG_CHUNKED flag if Encoding is "chunked" + * Description : - Prohibit filtering (CT_TABOO) if transfer coding compresses + * - Raise the CSP_FLAG_CHUNKED flag if coding is "chunked" * - Change from "chunked" to "identity" if body was chunked * but has been de-chunked for filtering. * @@ -833,7 +845,7 @@ char *server_content_type(const struct parsers *v, const char *s, struct client_ * Returns : A duplicate string pointer to this header (ie. pass thru) * *********************************************************************/ -char *server_transfer_encoding(const struct parsers *v, const char *s, struct client_state *csp) +char *server_transfer_coding(const struct parsers *v, const char *s, struct client_state *csp) { /* * Turn off pcrs and gif filtering if body compressed @@ -865,6 +877,35 @@ char *server_transfer_encoding(const struct parsers *v, const char *s, struct cl } +/********************************************************************* + * + * Function : server_content_encoding + * + * Description : Prohibit filtering (CT_TABOO) if content encoding compresses + * + * Parameters : + * 1 : v = ignored + * 2 : s = header string we are "considering" + * 3 : csp = Current client state (buffers, headers, etc...) + * + * Returns : A duplicate string pointer to this header (ie. pass thru) + * + *********************************************************************/ +char *server_content_encoding(const struct parsers *v, const char *s, struct client_state *csp) +{ + /* + * Turn off pcrs and gif filtering if body compressed + */ + if (strstr(s, "gzip") || strstr(s, "compress") || strstr(s, "deflate")) + { + csp->content_type = CT_TABOO; + } + + return(strdup(s)); + +} + + /********************************************************************* * * Function : server_content_length @@ -1343,6 +1384,32 @@ char *client_accept(const struct parsers *v, const char *s, struct client_state /* the following functions add headers directly to the header list */ +/********************************************************************* + * + * Function : client_host_adder + * + * Description : (re)adds the host header. Called from `sed'. + * + * Parameters : + * 1 : csp = Current client state (buffers, headers, etc...) + * + * Returns : N/A + * + *********************************************************************/ +void client_host_adder(struct client_state *csp) +{ + char *p = NULL; + + p = strsav(p, "Host: "); + p = strsav(p, csp->http->hostport); + + log_error(LOG_LEVEL_HEADER, "addh: %s", p); + enlist(csp->headers, p); + + freez(p); +} + + /********************************************************************* * * Function : client_cookie_adder @@ -1585,36 +1652,6 @@ char *server_set_cookie(const struct parsers *v, const char *s, struct client_st } -#ifdef FEATURE_FORCE_LOAD -/********************************************************************* - * - * Function : client_host - * - * Description : Clean the FORCE_PREFIX out of the 'host' http - * header, if we use force - * - * Parameters : - * 1 : v = ignored - * 2 : s = header (from sed) to clean - * 3 : csp = Current client state (buffers, headers, etc...) - * - * Returns : A malloc'ed pointer to the cleaned host header - * - *********************************************************************/ -char *client_host(const struct parsers *v, const char *s, struct client_state *csp) -{ - char *cleanhost = strdup(s); - - if(csp->flags & CSP_FLAG_FORCED) - { - strclean(cleanhost, FORCE_PREFIX); - } - - return(cleanhost); -} -#endif /* def FEATURE_FORCE_LOAD */ - - #ifdef FEATURE_FORCE_LOAD /********************************************************************* *