In get_content_length(), add a sanity check for mingw32.
[privoxy.git] / jcc.c
diff --git a/jcc.c b/jcc.c
index 4b277f4..79c76ab 100644 (file)
--- a/jcc.c
+++ b/jcc.c
@@ -1,4 +1,4 @@
-const char jcc_rcs[] = "$Id: jcc.c,v 1.280 2009/08/28 14:42:06 fabiankeil Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.283 2009/09/05 18:04:37 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/jcc.c,v $
@@ -2213,7 +2213,6 @@ static void chat(struct client_state *csp)
          }
          else
          {
-            const char *header_start;
             /*
              * We're still looking for the end of the server's header.
              * Buffer up the data we just read.  If that fails, there's
@@ -2228,8 +2227,6 @@ static void chat(struct client_state *csp)
                return;
             }
 
-            header_start = csp->iob->cur;
-
             /* Convert iob into something sed() can digest */
             if (JB_ERR_PARSE == get_server_headers(csp))
             {
@@ -2255,22 +2252,21 @@ static void chat(struct client_state *csp)
                    * Since we have to wait for more from the server before
                    * we can parse the headers we just continue here.
                    */
-                  long header_offset = csp->iob->cur - header_start;
-                  assert(csp->iob->cur >= header_start);
-                  if (header_offset)
-                  {
-                     /*
-                      * If there's a header offset, we got content
-                      * as well and have to account for it.
-                      */
-                     byte_count += (unsigned long long)(len - header_offset);
-                  }
-                  log_error(LOG_LEVEL_CONNECT, "Continuing buffering headers. "
-                     "byte_count: %llu. header_offset: %d. len: %d.",
-                     byte_count, header_offset, len);
+                  log_error(LOG_LEVEL_CONNECT,
+                     "Continuing buffering headers. Most recently received: %d",
+                     len);
                   continue;
                }
             }
+            else
+            {
+               /*
+                * Account for the content bytes we
+                * might have gotten with the headers.
+                */
+               assert(csp->iob->eod >= csp->iob->cur);
+               byte_count = (unsigned long long)(csp->iob->eod - csp->iob->cur);
+            }
 
             /* Did we actually get anything? */
             if (NULL == csp->headers->first)
@@ -2368,18 +2364,6 @@ static void chat(struct client_state *csp)
                   mark_server_socket_tainted(csp);
                   return;
                }
-
-               byte_count += (unsigned long long)len;
-            }
-            else
-            {
-               /*
-                * XXX: the header lenght should probably
-                * be calculated by get_server_headers().
-                */
-               long header_length = csp->iob->cur - header_start;
-               assert(csp->iob->cur > header_start);
-               byte_count += (unsigned long long)(len - header_length);
             }
 
             /* we're finished with the server's header */
@@ -2467,14 +2451,6 @@ static void serve(struct client_state *csp)
    {
       chat(csp);
 
-      if ((csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE)
-         && !(csp->flags & CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET))
-      {
-         log_error(LOG_LEVEL_CONNECT, "The server didn't specify how long "
-            "the connection will stay open. Assume it's only a second.");
-         csp->server_connection.keep_alive_timeout = 1;
-      }
-
       continue_chatting = (csp->config->feature_flags
          & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)
          && (csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE)
@@ -2486,7 +2462,17 @@ static void serve(struct client_state *csp)
 
       if (continue_chatting)
       {
-         unsigned int client_timeout = (unsigned)csp->server_connection.keep_alive_timeout - latency;
+         unsigned int client_timeout;
+
+         if (!(csp->flags & CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET))
+         {
+            log_error(LOG_LEVEL_CONNECT, "The server didn't specify how long "
+               "the connection will stay open. Assume it's only a second.");
+            csp->server_connection.keep_alive_timeout = 1;
+         }
+
+         client_timeout = (unsigned)csp->server_connection.keep_alive_timeout - latency;
+
          log_error(LOG_LEVEL_CONNECT,
             "Waiting for the next client request. "
             "Keeping the server socket %d to %s open.",