Version stamp current changes.
[privoxy.git] / parsers.c
index 77e6c1a..d56fde8 100644 (file)
--- a/parsers.c
+++ b/parsers.c
@@ -1,4 +1,4 @@
-const char parsers_rcs[] = "$Id: parsers.c,v 1.68 2006/09/06 10:43:32 fabiankeil Exp $";
+const char parsers_rcs[] = "$Id: parsers.c,v 1.74 2006/10/02 16:59:12 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/parsers.c,v $
@@ -40,6 +40,31 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.68 2006/09/06 10:43:32 fabiankeil
  *
  * Revisions   :
  *    $Log: parsers.c,v $
+ *    Revision 1.74  2006/10/02 16:59:12  fabiankeil
+ *    The special header "X-Filter: No" now disables
+ *    header filtering as well.
+ *
+ *    Revision 1.73  2006/09/23 13:26:38  roro
+ *    Replace TABs by spaces in source code.
+ *
+ *    Revision 1.72  2006/09/23 12:37:21  fabiankeil
+ *    Don't print a log message every time filter_headers is
+ *    entered or left. It only creates noise without any real
+ *    information.
+ *
+ *    Revision 1.71  2006/09/21 19:55:17  fabiankeil
+ *    Fix +hide-if-modified-since{-n}.
+ *
+ *    Revision 1.70  2006/09/08 12:06:34  fabiankeil
+ *    Have hide-if-modified-since interpret the random
+ *    range value as minutes instead of hours. Allows
+ *    more fine-grained configuration.
+ *
+ *    Revision 1.69  2006/09/06 16:25:51  fabiankeil
+ *    Always have parse_header_time return a pointer
+ *    that actual makes sense, even though we currently
+ *    only need it to detect problems.
+ *
  *    Revision 1.68  2006/09/06 10:43:32  fabiankeil
  *    Added config option enable-remote-http-toggle
  *    to specify if Privoxy should recognize special
@@ -514,11 +539,10 @@ const char parsers_rcs[] = "$Id: parsers.c,v 1.68 2006/09/06 10:43:32 fabiankeil
 
 #include "project.h"
 
-#ifdef OSX_DARWIN
-#include <pthread.h>
+#ifdef FEATURE_PTHREAD
 #include "jcc.h"
 /* jcc.h is for mutex semapores only */
-#endif /* def OSX_DARWIN */
+#endif /* def FEATURE_PTHREAD */
 #include "list.h"
 #include "parsers.h"
 #include "encode.h"
@@ -1013,7 +1037,6 @@ jb_err filter_header(struct client_state *csp, char **header)
 
    int i, found_filters = 0;
 
-   log_error(LOG_LEVEL_RE_FILTER, "Entered filter_headers");
    /*
     * Need to check the set of re_filterfiles...
     */
@@ -1101,12 +1124,11 @@ jb_err filter_header(struct client_state *csp, char **header)
 
    if ( 0 == size )
    {
-          log_error(LOG_LEVEL_HEADER, "Removing empty header %s", *header);
+      log_error(LOG_LEVEL_HEADER, "Removing empty header %s", *header);
       freez(*header);
    }
-   log_error(LOG_LEVEL_RE_FILTER, "Leaving filter headers");
-   return(JB_ERR_OK);
 
+   return(JB_ERR_OK);
 }
 
 
@@ -1557,7 +1579,7 @@ jb_err server_last_modified(struct client_state *csp, char **header)
       now = time(NULL);
 #ifdef HAVE_GMTIME_R
       timeptr = gmtime_r(&now, &gmt);
-#elif OSX_DARWIN
+#elif FEATURE_PTHREAD
       pthread_mutex_lock(&gmtime_mutex);
       timeptr = gmtime(&now);
       pthread_mutex_unlock(&gmtime_mutex);
@@ -1578,7 +1600,7 @@ jb_err server_last_modified(struct client_state *csp, char **header)
             last_modified += rtime;
 #ifdef HAVE_GMTIME_R
             timeptr = gmtime_r(&last_modified, &gmt);
-#elif OSX_DARWIN
+#elif FEATURE_PTHREAD
             pthread_mutex_lock(&gmtime_mutex);
             timeptr = gmtime(&last_modified);
             pthread_mutex_unlock(&gmtime_mutex);
@@ -2307,16 +2329,16 @@ jb_err client_if_modified_since(struct client_state *csp, char **header)
          else
          {
             rtime = strtol(newval, &endptr, 0);
-            if(rtime < 0)
-            {
-                rtime *= -1; 
-                negative = 1;
-            }
             if(rtime)
             {
-               log_error(LOG_LEVEL_HEADER, "Randomizing: %s (random range: %d hou%s)",
-                  *header, rtime, (rtime == 1 || rtime == -1) ? "r": "rs");
-               rtime *= 3600;
+               log_error(LOG_LEVEL_HEADER, "Randomizing: %s (random range: %d minut%s)",
+                  *header, rtime, (rtime == 1 || rtime == -1) ? "e": "es");
+               if(rtime < 0)
+               {
+                  rtime *= -1; 
+                  negative = 1;
+               }
+               rtime *= 60;
                rtime = pick_from_range(rtime);
             }
             else
@@ -2324,10 +2346,10 @@ jb_err client_if_modified_since(struct client_state *csp, char **header)
                log_error(LOG_LEVEL_ERROR, "Random range is 0. Assuming time transformation test.",
                   *header);
             }
-            tm += rtime;
+            tm += rtime * (negative ? -1 : 1);
 #ifdef HAVE_GMTIME_R
             timeptr = gmtime_r(&tm, &gmt);
-#elif OSX_DARWIN
+#elif FEATURE_PTHREAD
             pthread_mutex_lock(&gmtime_mutex);
             timeptr = gmtime(&tm);
             pthread_mutex_unlock(&gmtime_mutex);
@@ -2416,7 +2438,7 @@ jb_err client_x_filter(struct client_state *csp, char **header)
       {
          log_error(LOG_LEVEL_INFO, "Ignored the client's request to fetch without filtering.");
       }
-               else
+      else
       {
          if (csp->action->flags & ACTION_FORCE_TEXT_MODE)
          {
@@ -2425,6 +2447,8 @@ jb_err client_x_filter(struct client_state *csp, char **header)
          else
          {  
             csp->content_type = CT_TABOO;
+            csp->action->flags &= ~ACTION_FILTER_SERVER_HEADERS;
+            csp->action->flags &= ~ACTION_FILTER_CLIENT_HEADERS;
             log_error(LOG_LEVEL_HEADER, "Accepted the client's request to fetch without filtering.");
          }
          log_error(LOG_LEVEL_HEADER, "Crunching %s", *header);
@@ -2754,7 +2778,7 @@ jb_err server_set_cookie(struct client_state *csp, char **header)
       time (&now); 
 #ifdef HAVE_LOCALTIME_R
       tm_now = *localtime_r(&now, &tm_now);
-#elif OSX_DARWIN
+#elif FEATURE_PTHREAD
       pthread_mutex_lock(&localtime_mutex);
       tm_now = *localtime (&now); 
       pthread_mutex_unlock(&localtime_mutex);