You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Roy Fielding <fi...@hyperreal.org> on 1997/09/14 12:05:02 UTC

cvs commit: apachen/src/main http_protocol.c http_protocol.h

fielding    97/09/14 03:05:00

  Modified:    src      INDENT
               src/main http_protocol.c http_protocol.h
  Log:
  Reformatted http_protocol.* according to style guide.
  
  Revision  Changes    Path
  1.3       +2 -2      apachen/src/INDENT
  
  Index: INDENT
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/INDENT,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- INDENT	1997/09/14 07:47:36	1.2
  +++ INDENT	1997/09/14 10:04:57	1.3
  @@ -23,8 +23,8 @@
      http_log.h
      http_main.c			RESERVED until Dean applies his two patches
      http_main.h
  -   http_protocol.c		RESERVED while Roy is working on it
  -   http_protocol.h		RESERVED while Roy is working on it
  +   http_protocol.c		DONE by Roy
  +   http_protocol.h		DONE by Roy
      http_request.c		RESERVED while Roy is working on it
      http_request.h		RESERVED while Roy is working on it
      httpd.h
  
  
  
  1.162     +946 -908  apachen/src/main/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/main/http_protocol.c,v
  retrieving revision 1.161
  retrieving revision 1.162
  diff -u -r1.161 -r1.162
  --- http_protocol.c	1997/09/12 18:56:02	1.161
  +++ http_protocol.c	1997/09/14 10:04:58	1.162
  @@ -6,7 +6,7 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *    notice, this list of conditions and the following disclaimer.
    *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
  @@ -49,7 +49,7 @@
    * project, please see <http://www.apache.org/>.
    *
    */
  -  
  +
   /*
    * http_protocol.c --- routines which directly communicate with the client.
    *
  @@ -64,59 +64,60 @@
   #include "http_protocol.h"
   #include "http_main.h"
   #include "http_request.h"
  -#include "http_log.h"		/* For errors detected in basic auth
  -				 * common support code...
  -				 */
  +#include "http_log.h"           /* For errors detected in basic auth common
  +                                 * support code... */
   #include "util_date.h"          /* For parseHTTPdate and BAD_DATE */
   #include <stdarg.h>
   #include "http_conf_globals.h"
   
   #define SET_BYTES_SENT(r) \
     do { if (r->sent_bodyct) \
  -	  bgetopt (r->connection->client, BO_BYTECT, &r->bytes_sent); \
  +          bgetopt (r->connection->client, BO_BYTECT, &r->bytes_sent); \
     } while (0)
   
   
  -static int parse_byterange (char *range, long clength, long *start, long *end)
  +static int parse_byterange(char *range, long clength, long *start, long *end)
   {
       char *dash = strchr(range, '-');
   
       if (!dash)
  -	return 0;
  +        return 0;
   
       if ((dash == range)) {
  -	/* In the form "-5" */
  -	*start = clength - atol(dash + 1);
  -	*end = clength - 1;
  +        /* In the form "-5" */
  +        *start = clength - atol(dash + 1);
  +        *end = clength - 1;
       }
       else {
  -	*dash = '\0';
  -	dash++;
  -	*start = atol(range);
  -	if (*dash)
  -	    *end = atol(dash);
  -	else	/* "5-" */
  -	    *end = clength -1;
  +        *dash = '\0';
  +        dash++;
  +        *start = atol(range);
  +        if (*dash)
  +            *end = atol(dash);
  +        else                    /* "5-" */
  +            *end = clength - 1;
       }
   
       if (*start > *end)
  -	return 0;
  +        return 0;
   
       if (*end >= clength)
  -	*end = clength - 1;
  +        *end = clength - 1;
   
       return 1;
   }
   
  -static int internal_byterange(int, long*, request_rec*, char**, long*, long*);
  +static int internal_byterange(int, long *, request_rec *, char **, long *,
  +                              long *);
   
  -API_EXPORT(int) set_byterange (request_rec *r)
  +API_EXPORT(int) set_byterange(request_rec *r)
   {
       char *range, *if_range, *match;
       char ts[MAX_STRING_LEN];
       long range_start, range_end;
   
  -    if (!r->clength || r->assbackwards) return 0;
  +    if (!r->clength || r->assbackwards)
  +        return 0;
   
       /* Check for Range request-header (HTTP/1.1) or Request-Range for
        * backwards-compatibility with second-draft Luotonen/Franks
  @@ -129,11 +130,11 @@
        */
   
       if (!(range = table_get(r->headers_in, "Range")))
  -          range = table_get(r->headers_in, "Request-Range");
  +        range = table_get(r->headers_in, "Request-Range");
   
       if (!range || strncmp(range, "bytes=", 6)) {
  -	table_set (r->headers_out, "Accept-Ranges", "bytes");
  -	return 0;
  +        table_set(r->headers_out, "Accept-Ranges", "bytes");
  +        return 0;
       }
   
       /* Check the If-Range header for Etag or Date */
  @@ -148,43 +149,43 @@
                    (strcasecmp(if_range, match) != 0))
               return 0;
       }
  -    
  +
       if (!strchr(range, ',')) {
  -	/* A single range */
  -	if (!parse_byterange(pstrdup(r->pool, range + 6), r->clength,
  -	                     &range_start, &range_end))
  -	    return 0;
  -
  -	r->byterange = 1;
  -
  -	ap_snprintf(ts, sizeof(ts), "bytes %ld-%ld/%ld",
  -	            range_start, range_end, r->clength);
  -	table_set(r->headers_out, "Content-Range", ts);
  -	ap_snprintf(ts, sizeof(ts), "%ld", range_end - range_start + 1);
  -	table_set(r->headers_out, "Content-Length", ts);
  +        /* A single range */
  +        if (!parse_byterange(pstrdup(r->pool, range + 6), r->clength,
  +                             &range_start, &range_end))
  +            return 0;
  +
  +        r->byterange = 1;
  +
  +        ap_snprintf(ts, sizeof(ts), "bytes %ld-%ld/%ld",
  +                    range_start, range_end, r->clength);
  +        table_set(r->headers_out, "Content-Range", ts);
  +        ap_snprintf(ts, sizeof(ts), "%ld", range_end - range_start + 1);
  +        table_set(r->headers_out, "Content-Length", ts);
       }
       else {
  -	/* a multiple range */
  -	char boundary[33];	/* Long enough */
  -	char *r_range = pstrdup(r->pool, range + 6);
  -	long tlength = 0;
  -	
  -	r->byterange = 2;
  -	ap_snprintf(boundary, sizeof(boundary), "%lx%lx",
  -	            r->request_time, (long)getpid());
  -	r->boundary = pstrdup(r->pool, boundary);
  -	while (internal_byterange(0, &tlength, r, &r_range, NULL, NULL));
  -	ap_snprintf(ts, sizeof(ts), "%ld", tlength);
  -	table_set(r->headers_out, "Content-Length", ts);
  +        /* a multiple range */
  +        char boundary[33];      /* Long enough */
  +        char *r_range = pstrdup(r->pool, range + 6);
  +        long tlength = 0;
  +
  +        r->byterange = 2;
  +        ap_snprintf(boundary, sizeof(boundary), "%lx%lx",
  +                    r->request_time, (long) getpid());
  +        r->boundary = pstrdup(r->pool, boundary);
  +        while (internal_byterange(0, &tlength, r, &r_range, NULL, NULL));
  +        ap_snprintf(ts, sizeof(ts), "%ld", tlength);
  +        table_set(r->headers_out, "Content-Length", ts);
       }
  -    
  +
       r->status = PARTIAL_CONTENT;
       r->range = range + 6;
   
       return 1;
   }
   
  -API_EXPORT(int) each_byterange (request_rec *r, long *offset, long *length)
  +API_EXPORT(int) each_byterange(request_rec *r, long *offset, long *length)
   {
       return internal_byterange(1, NULL, r, &r->range, offset, length);
   }
  @@ -198,63 +199,62 @@
    *
    * Either case will return 1 if it should be called again, and 0
    * when done.
  - *
    */
  -
   static int internal_byterange(int realreq, long *tlength, request_rec *r,
  -			      char **r_range, long *offset, long *length)
  +                              char **r_range, long *offset, long *length)
   {
       long range_start, range_end;
       char *range;
   
       if (!**r_range) {
  -	if (r->byterange > 1) {
  -	    if (realreq)
  -		rvputs(r, "\015\012--", r->boundary, "--\015\012", NULL);
  -	    else
  -		*tlength += 4 + strlen(r->boundary) + 4;
  -	}
  -	return 0;
  +        if (r->byterange > 1) {
  +            if (realreq)
  +                rvputs(r, "\015\012--", r->boundary, "--\015\012", NULL);
  +            else
  +                *tlength += 4 + strlen(r->boundary) + 4;
  +        }
  +        return 0;
       }
   
       range = getword_nc(r->pool, r_range, ',');
       if (!parse_byterange(range, r->clength, &range_start, &range_end))
  -	/* Skip this one */
  -	return internal_byterange(realreq, tlength, r, r_range, offset,
  -				  length);
  +        /* Skip this one */
  +        return internal_byterange(realreq, tlength, r, r_range, offset,
  +                                  length);
   
       if (r->byterange > 1) {
  -	char *ct = r->content_type ? r->content_type : default_type(r);
  -	char ts[MAX_STRING_LEN];
  -	
  -	ap_snprintf(ts, sizeof(ts), "%ld-%ld/%ld", range_start, range_end, r->clength);
  -	if (realreq)
  -	    rvputs(r, "\015\012--", r->boundary, "\015\012Content-type: ",
  -	       ct, "\015\012Content-range: bytes ", ts, "\015\012\015\012",
  -	       NULL);
  -	else
  -	    *tlength += 4 + strlen(r->boundary) + 16 + strlen(ct) + 23 +
  -		strlen(ts) + 4;
  +        char *ct = r->content_type ? r->content_type : default_type(r);
  +        char ts[MAX_STRING_LEN];
  +
  +        ap_snprintf(ts, sizeof(ts), "%ld-%ld/%ld", range_start, range_end,
  +                    r->clength);
  +        if (realreq)
  +            rvputs(r, "\015\012--", r->boundary, "\015\012Content-type: ",
  +                   ct, "\015\012Content-range: bytes ", ts, "\015\012\015\012",
  +                   NULL);
  +        else
  +            *tlength += 4 + strlen(r->boundary) + 16 + strlen(ct) + 23 +
  +                        strlen(ts) + 4;
       }
   
       if (realreq) {
  -	*offset = range_start;
  -	*length = range_end - range_start + 1;
  +        *offset = range_start;
  +        *length = range_end - range_start + 1;
       }
       else {
  -	*tlength += range_end - range_start + 1;
  +        *tlength += range_end - range_start + 1;
       }
       return 1;
   }
   
  -API_EXPORT(int) set_content_length (request_rec *r, long clength)
  +API_EXPORT(int) set_content_length(request_rec *r, long clength)
   {
       char ts[MAX_STRING_LEN];
   
       r->clength = clength;
   
  -    ap_snprintf (ts, sizeof(ts), "%ld", clength);
  -    table_set (r->headers_out, "Content-Length", ts);
  +    ap_snprintf(ts, sizeof(ts), "%ld", clength);
  +    table_set(r->headers_out, "Content-Length", ts);
   
       return 0;
   }
  @@ -262,9 +262,9 @@
   int set_keepalive(request_rec *r)
   {
       int ka_sent = 0;
  -    int wimpy   = find_token(r->pool,
  -                             table_get(r->headers_out, "Connection"), "close");
  -    char *conn  = table_get(r->headers_in, "Connection");
  +    int wimpy = find_token(r->pool,
  +                           table_get(r->headers_out, "Connection"), "close");
  +    char *conn = table_get(r->headers_in, "Connection");
   
       /* The following convoluted conditional determines whether or not
        * the current connection should remain persistent after this response
  @@ -307,30 +307,30 @@
           !status_drops_connection(r->status) &&
           !wimpy &&
           !find_token(r->pool, conn, "close") &&
  -	(!table_get(r->subprocess_env, "nokeepalive") ||
  -	 table_get(r->headers_in, "Via")) &&
  -	((ka_sent = find_token(r->pool, conn, "keep-alive")) ||
  -	   (r->proto_num >= 1001))
  +        (!table_get(r->subprocess_env, "nokeepalive") ||
  +         table_get(r->headers_in, "Via")) &&
  +        ((ka_sent = find_token(r->pool, conn, "keep-alive")) ||
  +         (r->proto_num >= 1001))
          ) {
  -	char header[256];
  -	int left = r->server->keep_alive_max - r->connection->keepalives;
  -	
  -	r->connection->keepalive = 1;
  -	r->connection->keepalives++;
  -	
  -	/* If they sent a Keep-Alive token, send one back */
  -	if (ka_sent) {
  -	    if (r->server->keep_alive_max)
  -		ap_snprintf(header, sizeof(header), "timeout=%d, max=%d",
  -			    r->server->keep_alive_timeout, left);
  -	    else
  -		ap_snprintf(header, sizeof(header), "timeout=%d",
  -			    r->server->keep_alive_timeout);
  -	    table_set(r->headers_out, "Keep-Alive", header);
  -	    table_merge(r->headers_out, "Connection", "Keep-Alive");
  -	}
  +        char header[256];
  +        int left = r->server->keep_alive_max - r->connection->keepalives;
  +
  +        r->connection->keepalive = 1;
  +        r->connection->keepalives++;
  +
  +        /* If they sent a Keep-Alive token, send one back */
  +        if (ka_sent) {
  +            if (r->server->keep_alive_max)
  +                ap_snprintf(header, sizeof(header), "timeout=%d, max=%d",
  +                            r->server->keep_alive_timeout, left);
  +            else
  +                ap_snprintf(header, sizeof(header), "timeout=%d",
  +                            r->server->keep_alive_timeout);
  +            table_set(r->headers_out, "Keep-Alive", header);
  +            table_merge(r->headers_out, "Connection", "Keep-Alive");
  +        }
   
  -	return 1;
  +        return 1;
       }
   
       /* Otherwise, we need to indicate that we will be closing this
  @@ -378,8 +378,7 @@
       char *if_match, *if_modified_since, *if_unmodified, *if_nonematch;
       time_t mtime;
   
  -    /*
  -     * Check for conditional requests --- note that we only want to do
  +    /* Check for conditional requests --- note that we only want to do
        * this if we are successful so far and we are not processing a
        * subrequest or an ErrorDocument.
        *
  @@ -396,40 +395,34 @@
   
       mtime = (r->mtime != 0) ? r->mtime : time(NULL);
   
  -    /*
  -     * If an If-Match request-header field was given
  +    /* If an If-Match request-header field was given
        * AND if our ETag does not match any of the entity tags in that field
        * AND the field value is not "*" (meaning match anything), then
        *     respond with a status of 412 (Precondition Failed).
        */
  -
       if ((if_match = table_get(r->headers_in, "If-Match")) != NULL) {
  -	if ((etag == NULL) ||
  -	    ((if_match[0] != '*') && !find_token(r->pool, if_match, etag))) {
  -	    return HTTP_PRECONDITION_FAILED;
  -	}
  +        if ((etag == NULL) ||
  +            ((if_match[0] != '*') && !find_token(r->pool, if_match, etag))) {
  +            return HTTP_PRECONDITION_FAILED;
  +        }
       }
  -
  -    /*
  -     * Else if a valid If-Unmodified-Since request-header field was given
  -     * AND the requested resource has been modified since the time
  -     * specified in this field, then the server MUST
  -     *     respond with a status of 412 (Precondition Failed).
  -     */
  -
       else {
  -	if_unmodified = table_get(r->headers_in, "If-Unmodified-Since");
  -	if (if_unmodified != NULL) {
  -	    time_t ius = parseHTTPdate(if_unmodified);
  -
  -	    if ((ius != BAD_DATE) && (mtime > ius)) {
  -		return HTTP_PRECONDITION_FAILED;
  -	    }
  -	}
  +        /* Else if a valid If-Unmodified-Since request-header field was given
  +         * AND the requested resource has been modified since the time
  +         * specified in this field, then the server MUST
  +         *     respond with a status of 412 (Precondition Failed).
  +         */
  +        if_unmodified = table_get(r->headers_in, "If-Unmodified-Since");
  +        if (if_unmodified != NULL) {
  +            time_t ius = parseHTTPdate(if_unmodified);
  +
  +            if ((ius != BAD_DATE) && (mtime > ius)) {
  +                return HTTP_PRECONDITION_FAILED;
  +            }
  +        }
       }
   
  -    /*
  -     * If an If-None-Match request-header field was given
  +    /* If an If-None-Match request-header field was given
        * AND if our ETag matches any of the entity tags in that field
        * OR if the field value is "*" (meaning match anything), then
        *    if the request method was GET or HEAD, the server SHOULD
  @@ -437,36 +430,32 @@
        *    For all other request methods, the server MUST
        *       respond with a status of 412 (Precondition Failed).
        */
  -
       if_nonematch = table_get(r->headers_in, "If-None-Match");
       if (if_nonematch != NULL) {
  -	int rstatus;
  +        int rstatus;
   
  -	if ((if_nonematch[0] == '*')
  -	    || ((etag != NULL) && find_token(r->pool, if_nonematch, etag))) {
  -	    rstatus = (r->method_number == M_GET)
  -			? HTTP_NOT_MODIFIED
  -			: HTTP_PRECONDITION_FAILED;
  -	    return rstatus;
  -	}
  +        if ((if_nonematch[0] == '*')
  +            || ((etag != NULL) && find_token(r->pool, if_nonematch, etag))) {
  +            rstatus = (r->method_number == M_GET) ? HTTP_NOT_MODIFIED
  +                                                  : HTTP_PRECONDITION_FAILED;
  +            return rstatus;
  +        }
       }
  -
  -    /*
  -     * Else if a valid If-Modified-Since request-header field was given
  +    /* Else if a valid If-Modified-Since request-header field was given
        * AND it is a GET or HEAD request
        * AND the requested resource has not been modified since the time
        * specified in this field, then the server MUST
        *    respond with a status of 304 (Not Modified).
        * A date later than the server's current request time is invalid.
        */
  -
  -    else if ((r->method_number == M_GET) && ((if_modified_since =
  -              table_get(r->headers_in, "If-Modified-Since")) != NULL)) {
  +    else if ((r->method_number == M_GET)
  +             && ((if_modified_since =
  +                  table_get(r->headers_in, "If-Modified-Since")) != NULL)) {
           time_t ims = parseHTTPdate(if_modified_since);
   
           if ((ims >= mtime) && (ims <= r->request_time)) {
               return HTTP_NOT_MODIFIED;
  -	}
  +        }
       }
       return OK;
   }
  @@ -496,14 +485,14 @@
        */
   
       if (r->finfo.st_mode != 0) {
  -        ap_snprintf(weak_etag, sizeof(weak_etag), "W/\"%lx-%lx-%lx\"", 
  -		    (unsigned long)r->finfo.st_ino,
  -		    (unsigned long)r->finfo.st_size,
  -		    (unsigned long)r->mtime);
  +        ap_snprintf(weak_etag, sizeof(weak_etag), "W/\"%lx-%lx-%lx\"",
  +                    (unsigned long) r->finfo.st_ino,
  +                    (unsigned long) r->finfo.st_size,
  +                    (unsigned long) r->mtime);
       }
       else {
           ap_snprintf(weak_etag, sizeof(weak_etag), "W/\"%lx\"",
  -		    (unsigned long)r->mtime);
  +                    (unsigned long) r->mtime);
       }
   
       etag = weak_etag + ((r->request_time - r->mtime > 1) ? 2 : 0);
  @@ -520,7 +509,7 @@
       time_t mod_time = rationalize_mtime(r, r->mtime);
   
       table_set(r->headers_out, "Last-Modified",
  -	      gm_timestr_822(r->pool, mod_time));
  +              gm_timestr_822(r->pool, mod_time));
   }
   
   /* Get a line of protocol input, including any continuation lines
  @@ -545,35 +534,37 @@
       pos = s;
   
       do {
  -        retval = bgets(pos, n, in);    /* retval == -1 if error, 0 if EOF */
  +        retval = bgets(pos, n, in);     /* retval == -1 if error, 0 if EOF */
   
           if (retval <= 0)
               return ((retval < 0) && (total == 0)) ? -1 : total;
   
  -        /* retval is the number of characters read, not including NUL     */
  +        /* retval is the number of characters read, not including NUL      */
   
  -        n     -= retval;      /* Keep track of how much of s is full      */
  -        pos   += (retval-1);  /*               and where s ends           */
  -        total += retval;      /*               and how long s has become  */
  +        n -= retval;            /* Keep track of how much of s is full     */
  +        pos += (retval - 1);    /* and where s ends                        */
  +        total += retval;        /* and how long s has become               */
   
  -        if (*pos == '\n') {   /* Did we get a full line of input?         */
  +        if (*pos == '\n') {     /* Did we get a full line of input?        */
               *pos = '\0';
  -            --total; ++n;
  +            --total;
  +            ++n;
           }
  -        else return total;    /* if not, input line exceeded buffer size  */
  +        else
  +            return total;       /* if not, input line exceeded buffer size */
   
  -    /* Continue appending if line folding is desired and
  -     * the last line was not empty and we have room in the buffer and
  -     * the next line begins with a continuation character.
  -     */
  -    } while (fold && (retval != 1) && (n > 1) &&
  -             (blookc(&next, in) == 1) &&
  -             ((next == ' ') || (next == '\t')));
  +        /* Continue appending if line folding is desired and
  +         * the last line was not empty and we have room in the buffer and
  +         * the next line begins with a continuation character.
  +         */
  +    } while (fold && (retval != 1) && (n > 1)
  +                  && (blookc(&next, in) == 1)
  +                  && ((next == ' ') || (next == '\t')));
   
       return total;
   }
   
  -void parse_uri (request_rec *r, const char *uri)
  +void parse_uri(request_rec *r, const char *uri)
   {
       const char *s;
   
  @@ -582,105 +573,115 @@
       size_t loop, uri_len;
   #endif
   
  -/* A proxy request contains a ':' early on, but not as first character */
  -    for (s=uri; s != '\0'; s++)
  -	if (!isalnum(*s) && *s != '+' && *s != '-' && *s != '.') break;
  +    /* A proxy request contains a ':' early on, but not as first character */
   
  -    if (*s == ':' && s != uri)
  -    {
  -	r->proxyreq = 1;
  -	r->uri = pstrdup(r->pool, uri);
  -	r->args = NULL;
  +    for (s = uri; s != '\0'; s++)
  +        if (!isalnum(*s) && *s != '+' && *s != '-' && *s != '.')
  +            break;
  +
  +    if (*s == ':' && s != uri) {
  +        r->proxyreq = 1;
  +        r->uri = pstrdup(r->pool, uri);
  +        r->args = NULL;
       }
       else if (r->method && !strcmp(r->method, "TRACE")) {
  -	r->proxyreq = 0;
  -	r->uri = pstrdup(r->pool, uri);
  -	r->args = NULL;
  +        r->proxyreq = 0;
  +        r->uri = pstrdup(r->pool, uri);
  +        r->args = NULL;
       }
       else {
  -	r->proxyreq = 0;
  -	r->uri = getword (r->pool, &uri, '?');
  +        r->proxyreq = 0;
  +        r->uri = getword(r->pool, &uri, '?');
   
   #if defined(__EMX__) || defined(WIN32)
  -    /* Handle path translations for OS/2 and plug security hole. */
  -    /* This will prevent "http://www.wherever.com/..\..\/" from
  -       returning a directory for the root drive. */
  -    uri_len = strlen(r->uri);
  -    for (loop = 0; loop < uri_len; ++loop) {
  -        if (r->uri[loop] == '\\')
  -            r->uri[loop] = '/';
  -    };
  +        /* Handle path translations for OS/2 and plug security hole.
  +         *
  +         * This will prevent "http://www.wherever.com/..\..\/" from
  +         * returning a directory for the root drive.
  +         */
  +        uri_len = strlen(r->uri);
  +        for (loop = 0; loop < uri_len; ++loop) {
  +            if (r->uri[loop] == '\\')
  +                r->uri[loop] = '/';
  +        };
   #endif
   #ifdef __EMX__
  -    /* Fix OS/2 HPFS filename case problem. */
  -    r->uri = strlwr(r->uri);
  +        /* Fix OS/2 HPFS filename case problem. */
  +        r->uri = strlwr(r->uri);
   #endif
   
  -	if (*uri) r->args= pstrdup(r->pool, uri);
  -	else r->args = NULL;
  +        if (*uri)
  +            r->args = pstrdup(r->pool, uri);
  +        else
  +            r->args = NULL;
       }
   }
   
  -const char *check_fulluri (request_rec *r, const char *uri) {
  -  char *name, *host;
  -  int i;
  -  unsigned port;
  -
  -  /* This routine parses full URLs, if they match the server */
  -  if (strncmp(uri, "http://", 7)) return uri;
  -  name = pstrdup(r->pool, uri + 7);
  -  
  -  /* Find the hostname, assuming a valid request */
  -  i = ind(name, '/');
  -  name[i] = '\0';
  -
  -  /* Find the port */
  -  host = getword_nc(r->pool, &name, ':');
  -  if (*name) port = atoi(name);
  -  else port = 80;
  -
  -  /* Make sure ports patch */
  -  if (port != r->server->port) return uri;
  -
  -  /* Save it for later use */
  -  r->hostname = pstrdup(r->pool, host);
  -  r->hostlen = 7 + i;
  -
  -  /* The easy cases first */
  -  if (!strcasecmp(host, r->server->server_hostname)) {
  -    return (uri + r->hostlen);
  -  }
  -  else if (!strcmp(host, inet_ntoa(r->connection->local_addr.sin_addr))) {
  -    return (uri + r->hostlen);
  -  }
  -
  -  /* Now things get a bit trickier - check the IP address(es) of the host */
  -  /* they gave, see if it matches ours.                                   */
  -  else {
  -    struct hostent *hp;
  -    int n;
  +const char *check_fulluri(request_rec *r, const char *uri)
  +{
  +    char *name, *host;
  +    int i;
  +    unsigned port;
   
  -    if ((hp = gethostbyname(host))) {
  -      for (n = 0; hp->h_addr_list[n] != NULL; n++) {
  -	if (r->connection->local_addr.sin_addr.s_addr ==
  -	    (((struct in_addr *)(hp->h_addr_list[n]))->s_addr)) {
  -	  return (uri + r->hostlen);
  -	}
  -      }
  -    }
  -  }
  -  
  -  return uri;
  +    /* This routine parses full URLs, if they match the server */
  +    if (strncmp(uri, "http://", 7))
  +        return uri;
  +    name = pstrdup(r->pool, uri + 7);
  +
  +    /* Find the hostname, assuming a valid request */
  +    i = ind(name, '/');
  +    name[i] = '\0';
  +
  +    /* Find the port */
  +    host = getword_nc(r->pool, &name, ':');
  +    if (*name)
  +        port = atoi(name);
  +    else
  +        port = 80;
  +
  +    /* Make sure ports patch */
  +    if (port != r->server->port)
  +        return uri;
  +
  +    /* Save it for later use */
  +    r->hostname = pstrdup(r->pool, host);
  +    r->hostlen = 7 + i;
  +
  +    /* The easy cases first */
  +    if (!strcasecmp(host, r->server->server_hostname)) {
  +        return (uri + r->hostlen);
  +    }
  +    else if (!strcmp(host, inet_ntoa(r->connection->local_addr.sin_addr))) {
  +        return (uri + r->hostlen);
  +    }
  +    else {
  +        /* Now things get a bit trickier - check the IP address(es) of
  +         * the host they gave, see if it matches ours.
  +         */
  +        struct hostent *hp;
  +        int n;
  +
  +        if ((hp = gethostbyname(host))) {
  +            for (n = 0; hp->h_addr_list[n] != NULL; n++) {
  +                if (r->connection->local_addr.sin_addr.s_addr ==
  +                    (((struct in_addr *) (hp->h_addr_list[n]))->s_addr)) {
  +                    return (uri + r->hostlen);
  +                }
  +            }
  +        }
  +    }
  +
  +    return uri;
   }
   
  -int read_request_line (request_rec *r)
  +int read_request_line(request_rec *r)
   {
       char l[HUGE_STRING_LEN];
       const char *ll = l, *uri;
       conn_rec *conn = r->connection;
  -    int major = 1, minor = 0;	/* Assume HTTP/1.0 if non-"HTTP" protocol*/
  +    int major = 1, minor = 0;   /* Assume HTTP/1.0 if non-"HTTP" protocol */
       int len;
  -    
  +
       /* Read past empty lines until we get a real request line,
        * a read error, the connection closes (EOF), or we timeout.
        *
  @@ -695,263 +696,269 @@
        * read().  B_SAFEREAD ensures that the BUFF layer flushes if it will
        * have to block during a read.
        */
  -    bsetflag( conn->client, B_SAFEREAD, 1 );
  +    bsetflag(conn->client, B_SAFEREAD, 1);
       while ((len = getline(l, HUGE_STRING_LEN, conn->client, 0)) <= 0) {
           if ((len < 0) || bgetflag(conn->client, B_EOF)) {
  -	    bsetflag( conn->client, B_SAFEREAD, 0 );
  +            bsetflag(conn->client, B_SAFEREAD, 0);
               return 0;
  -	}
  +        }
       }
       /* we've probably got something to do, ignore graceful restart requests */
   #ifdef SIGUSR1
  -    signal (SIGUSR1, SIG_IGN);
  -#endif /* SIGUSR1 */
  -    bsetflag( conn->client, B_SAFEREAD, 0 );
  +    signal(SIGUSR1, SIG_IGN);
  +#endif                          /* SIGUSR1 */
  +    bsetflag(conn->client, B_SAFEREAD, 0);
       if (len == (HUGE_STRING_LEN - 1)) {
           aplog_error(APLOG_MARK, APLOG_ERR, r->server,
  -		    "request failed for %s, reason: URI too long",
  -		    get_remote_host(r->connection, r->per_dir_config, REMOTE_NAME));
  +                    "request failed for %s, reason: URI too long",
  +            get_remote_host(r->connection, r->per_dir_config, REMOTE_NAME));
           r->status = HTTP_REQUEST_URI_TOO_LARGE;
           return 0;
       }
   
       r->request_time = time(NULL);
  -    r->the_request = pstrdup (r->pool, l);
  +    r->the_request = pstrdup(r->pool, l);
       r->method = getword_white(r->pool, &ll);
       uri = getword_white(r->pool, &ll);
       uri = check_fulluri(r, uri);
  -    parse_uri (r, uri);
  -    
  +    parse_uri(r, uri);
  +
       r->assbackwards = (ll[0] == '\0');
  -    r->protocol = pstrdup (r->pool, ll[0] ? ll : "HTTP/0.9");
  +    r->protocol = pstrdup(r->pool, ll[0] ? ll : "HTTP/0.9");
       sscanf(r->protocol, "HTTP/%d.%d", &major, &minor);
  -    r->proto_num = 1000*major + minor;
  +    r->proto_num = 1000 * major + minor;
   
       return 1;
   }
   
  -void get_mime_headers (request_rec *r)
  +void get_mime_headers(request_rec *r)
   {
       conn_rec *c = r->connection;
       int len;
       char *value;
       char field[MAX_STRING_LEN];
   
  -    /* Read header lines until we get the empty separator line,
  -     * a read error, the connection closes (EOF), or we timeout.
  -     * Should we also check for overflow (len == MAX_STRING_LEN-1)?
  +    /*
  +     * Read header lines until we get the empty separator line, a read error,
  +     * the connection closes (EOF), or we timeout. Should we also check for
  +     * overflow (len == MAX_STRING_LEN-1)?
        */
       while ((len = getline(field, MAX_STRING_LEN, c->client, 1)) > 0) {
   
  -        if (!(value = strchr(field,':')))     /* Find the colon separator */
  -            continue;                         /*  or should puke 400 here */
  +        if (!(value = strchr(field, ':')))      /* Find the colon separator */
  +            continue;           /* or should puke 400 here */
   
           *value = '\0';
           ++value;
  -        while (isspace(*value)) ++value;      /* Skip to start of value   */
  +        while (isspace(*value))
  +            ++value;            /* Skip to start of value   */
   
           table_merge(r->headers_in, field, value);
       }
   }
   
  -static void check_hostalias (request_rec *r) {
  -  const char *hostname=r->hostname;
  -  char *host = getword(r->pool, &hostname, ':');	/* Get rid of port */
  -  unsigned port = (*hostname) ? atoi(hostname) : 80;
  -  server_rec *s;
  -  int l;
  -  server_rec_chain *src;
  -
  -  if (port && (port != r->server->port))
  -    return;
  -
  -  l = strlen(host)-1;
  -  if ((host[l]) == '.') {
  -    host[l] = '\0';
  -  }
  +static void check_hostalias(request_rec *r)
  +{
  +    const char *hostname = r->hostname;
  +    char *host = getword(r->pool, &hostname, ':');      /* Get rid of port */
  +    unsigned port = (*hostname) ? atoi(hostname) : 80;
  +    server_rec *s;
  +    int l;
  +    server_rec_chain *src;
   
  -  r->hostname = host;
  +    if (port && (port != r->server->port))
  +        return;
   
  -  for (src = vhash_table[VHASH_MAIN_BUCKET]; src; src = src->next) {
  -    const char *names;
  -    server_addr_rec *sar;
  +    l = strlen(host) - 1;
  +    if ((host[l]) == '.') {
  +        host[l] = '\0';
  +    }
   
  -    s = src->server;
  +    r->hostname = host;
   
  -    /* s->addrs != NULL because it's in a hash bucket */
  +    for (src = vhash_table[VHASH_MAIN_BUCKET]; src; src = src->next) {
  +        const char *names;
  +        server_addr_rec *sar;
  +
  +        s = src->server;
  +
  +        /* s->addrs != NULL because it's in a hash bucket.
  +         *
  +         * Note that default_server_hostnames has ensured that each
  +         * name-vhost appears only once in the VHASH_MAIN_BUCKET.
  +         */
  +
  +        if ((!strcasecmp(host, s->server_hostname)) && (port == s->port)) {
  +            r->server = r->connection->server = s;
  +            if (r->hostlen && !strncmp(r->uri, "http://", 7)) {
  +                r->uri += r->hostlen;
  +                parse_uri(r, r->uri);
  +            }
  +        }
   
  -    /* Note that default_server_hostnames has ensured that each name-vhost
  -     * appears only once in the VHASH_MAIN_BUCKET.
  +        /* search all the names from <VirtualHost> directive */
  +        for (sar = s->addrs; sar; sar = sar->next) {
  +            if (!strcasecmp(sar->virthost, host) &&
  +                ((sar->host_port == 0) || (port == sar->host_port))) {
  +                r->server = r->connection->server = s;
  +                if (r->hostlen && !strncmp(r->uri, "http://", 7)) {
  +                    r->uri += r->hostlen;
  +                    r->proxyreq = 0;
  +                }
  +            }
  +        }
  +
  +        /* search all the aliases from ServerAlias directive */
  +        names = s->names;
  +        if (names) {
  +            while (*names) {
  +                char *name = getword_conf(r->pool, &names);
  +
  +                if ((is_matchexp(name) && !strcasecmp_match(host, name)) ||
  +                    (!strcasecmp(host, name))) {
  +                    r->server = r->connection->server = s;
  +                    if (r->hostlen && !strncmp(r->uri, "http://", 7)) {
  +                        r->uri += r->hostlen;
  +                        r->proxyreq = 0;
  +                    }
  +                }
  +            }
  +        }
  +    }
  +}
  +
  +void check_serverpath(request_rec *r)
  +{
  +    server_rec *s;
  +    server_rec_chain *src;
  +
  +    /*
  +     * This is in conjunction with the ServerPath code in http_core, so we
  +     * get the right host attached to a non- Host-sending request.
        */
   
  -    if ((!strcasecmp(host, s->server_hostname)) && (port == s->port)) {
  -      r->server = r->connection->server = s;
  -      if (r->hostlen && !strncmp(r->uri, "http://", 7)) {
  -	r->uri += r->hostlen;
  -	parse_uri(r, r->uri);
  -      }
  -    }
  -
  -    /* search all the names from <VirtualHost> directive */
  -    for( sar = s->addrs; sar; sar = sar->next ) {
  -      if( !strcasecmp( sar->virthost, host ) &&
  -       ( (sar->host_port == 0) || (port == sar->host_port) )) {
  -	r->server = r->connection->server = s;
  -	if( r->hostlen && !strncmp( r->uri, "http://", 7) ) {
  -	  r->uri += r->hostlen;
  -	  r->proxyreq = 0;
  -	}
  -      }
  -    }
  -
  -    /* search all the aliases from ServerAlias directive */
  -    names = s->names;
  -    if( names ) {
  -      while (*names) {
  -	char *name = getword_conf (r->pool, &names);
  -
  -	if ((is_matchexp(name) && !strcasecmp_match(host, name)) ||
  -	    (!strcasecmp(host, name))) {
  -	  r->server = r->connection->server = s;
  -	  if (r->hostlen && !strncmp(r->uri, "http://", 7)) {
  -	    r->uri += r->hostlen;
  -	    r->proxyreq = 0;
  -	  }
  -	}
  -      }
  -    }
  -  }
  -}
  -
  -void check_serverpath (request_rec *r) {
  -  server_rec *s;
  -  server_rec_chain *src;
  -
  -  /* This is in conjunction with the ServerPath code in
  -   * http_core, so we get the right host attached to a non-
  -   * Host-sending request.
  -   */
  -
  -  for (src = vhash_table[VHASH_MAIN_BUCKET]; src; src = src->next) {
  -    s = src->server;
  -    if (s->addrs && s->path && !strncmp(r->uri, s->path, s->pathlen) &&
  -	(s->path[s->pathlen - 1] == '/' ||
  -	 r->uri[s->pathlen] == '/' ||
  -	 r->uri[s->pathlen] == '\0'))
  -      r->server = r->connection->server = s;
  -  }
  +    for (src = vhash_table[VHASH_MAIN_BUCKET]; src; src = src->next) {
  +        s = src->server;
  +        if (s->addrs && s->path && !strncmp(r->uri, s->path, s->pathlen) &&
  +            (s->path[s->pathlen - 1] == '/' ||
  +             r->uri[s->pathlen] == '/' ||
  +             r->uri[s->pathlen] == '\0'))
  +            r->server = r->connection->server = s;
  +    }
   }
   
   
  -static void check_default_server (request_rec *r)
  +static void check_default_server(request_rec *r)
   {
       server_addr_rec *sar;
       server_rec_chain *trav;
       unsigned port;
   
  -    port = ntohs (r->connection->local_addr.sin_port);
  +    port = ntohs(r->connection->local_addr.sin_port);
       for (trav = vhash_table[VHASH_DEFAULT_BUCKET]; trav; trav = trav->next) {
  -	sar = trav->sar;
  -	if (sar->host_port == 0 || sar->host_port == port) {
  -	    /* match! */
  -	    r->server = r->connection->server = trav->server;
  -	    return;
  -	}
  +        sar = trav->sar;
  +        if (sar->host_port == 0 || sar->host_port == port) {
  +            /* match! */
  +            r->server = r->connection->server = trav->server;
  +            return;
  +        }
       }
   }
   
  -request_rec *read_request (conn_rec *conn)
  +request_rec *read_request(conn_rec *conn)
   {
  -    request_rec *r = (request_rec *)pcalloc (conn->pool, sizeof(request_rec));
  +    request_rec *r = (request_rec *) pcalloc(conn->pool, sizeof(request_rec));
       int access_status;
   
  -    r->connection = conn;
  -    conn->server = conn->base_server;
  -    r->server = conn->server;
  -    r->pool = make_sub_pool(conn->pool);
  -
  -    conn->keptalive = conn->keepalive == 1;
  -    conn->keepalive = 0;
  -
  -    conn->user = NULL;
  -    conn->auth_type = NULL;
  -
  -    r->headers_in = make_table (r->pool, 50);
  -    r->subprocess_env = make_table (r->pool, 50);
  -    r->headers_out = make_table (r->pool, 5);
  -    r->err_headers_out = make_table (r->pool, 5);
  -    r->notes = make_table (r->pool, 5);
  -
  -    r->request_config = create_request_config (r->pool);
  -    r->per_dir_config = r->server->lookup_defaults; /* For now. */
  -
  -    r->sent_bodyct = 0; /* bytect isn't for body */
  -
  -    r->read_length  = 0;
  -    r->read_body    = REQUEST_NO_BODY;
  -    
  -    r->status = HTTP_REQUEST_TIME_OUT;	/* Until we get a request */
  +    r->connection      = conn;
  +    conn->server       = conn->base_server;
  +    r->server          = conn->server;
  +    r->pool            = make_sub_pool(conn->pool);
  +
  +    conn->keptalive    = conn->keepalive == 1;
  +    conn->keepalive    = 0;
  +
  +    conn->user         = NULL;
  +    conn->auth_type    = NULL;
  +
  +    r->headers_in      = make_table(r->pool, 50);
  +    r->subprocess_env  = make_table(r->pool, 50);
  +    r->headers_out     = make_table(r->pool, 5);
  +    r->err_headers_out = make_table(r->pool, 5);
  +    r->notes           = make_table(r->pool, 5);
  +
  +    r->request_config  = create_request_config(r->pool);
  +    r->per_dir_config  = r->server->lookup_defaults;
  +
  +    r->sent_bodyct     = 0;                      /* bytect isn't for body */
  +
  +    r->read_length     = 0;
  +    r->read_body       = REQUEST_NO_BODY;
  +
  +    r->status          = HTTP_REQUEST_TIME_OUT;  /* Until we get a request */
   
       /* Get the request... */
  -    
  +
       keepalive_timeout("read request line", r);
  -    if (!read_request_line (r)) {
  +    if (!read_request_line(r)) {
           kill_timeout(r);
           return NULL;
       }
       if (!r->assbackwards) {
           hard_timeout("read request headers", r);
  -        get_mime_headers (r);
  +        get_mime_headers(r);
       }
       kill_timeout(r);
   
  -    r->status = HTTP_OK;                /* Until further notice. */
  +    r->status = HTTP_OK;                         /* Until further notice. */
   
       /* if it's the main server so far, we have to do name-vhost style lookups */
  +
       if (r->server->is_virtual == 0) {
  -	if (r->hostname || (r->hostname = table_get(r->headers_in, "Host")))
  -	    check_hostalias(r);
  -	else
  -	    check_serverpath(r);
  -	/* if that failed, then look for a default server */
  -	if (r->server->is_virtual == 0) {
  -	    check_default_server (r);
  -	}
  -    } else if (!r->hostname) {
  -	/* must set this for HTTP/1.1 support */
  -	r->hostname = table_get (r->headers_in, "Host");
  +        if (r->hostname || (r->hostname = table_get(r->headers_in, "Host")))
  +            check_hostalias(r);
  +        else
  +            check_serverpath(r);
  +        /* if that failed, then look for a default server */
  +        if (r->server->is_virtual == 0) {
  +            check_default_server(r);
  +        }
  +    }
  +    else if (!r->hostname) {
  +        /* must set this for HTTP/1.1 support */
  +        r->hostname = table_get(r->headers_in, "Host");
       }
       /* we have finished the search for a vhost */
  -    
  +
       /* we may have switched to another server */
       r->per_dir_config = r->server->lookup_defaults;
   
  -    conn->keptalive = 0;   /* We now have a request to play with */
  -    
  -    if(!strcmp(r->method, "HEAD")) {
  -        r->header_only=1;
  -	r->method_number = M_GET;
  -    }
  -    else if(!strcmp(r->method, "GET")) 
  -	r->method_number = M_GET;
  -    else if(!strcmp(r->method,"POST")) 
  +    conn->keptalive = 0;        /* We now have a request to play with */
  +
  +    if (!strcmp(r->method, "HEAD")) {
  +        r->header_only = 1;
  +        r->method_number = M_GET;
  +    }
  +    else if (!strcmp(r->method, "GET"))
  +        r->method_number = M_GET;
  +    else if (!strcmp(r->method, "POST"))
           r->method_number = M_POST;
  -    else if(!strcmp(r->method,"PUT")) 
  +    else if (!strcmp(r->method, "PUT"))
           r->method_number = M_PUT;
  -    else if(!strcmp(r->method,"DELETE")) 
  +    else if (!strcmp(r->method, "DELETE"))
           r->method_number = M_DELETE;
  -    else if(!strcmp(r->method,"CONNECT"))
  +    else if (!strcmp(r->method, "CONNECT"))
           r->method_number = M_CONNECT;
  -    else if(!strcmp(r->method,"OPTIONS"))
  +    else if (!strcmp(r->method, "OPTIONS"))
           r->method_number = M_OPTIONS;
  -    else if(!strcmp(r->method,"TRACE"))
  +    else if (!strcmp(r->method, "TRACE"))
           r->method_number = M_TRACE;
  -    else 
  -        r->method_number = M_INVALID; /* Will eventually croak. */
  +    else
  +        r->method_number = M_INVALID;   /* Will eventually croak. */
   
  -    if ((access_status = run_post_read_request (r))) {
  -	die (access_status, r);
  -	return NULL;
  +    if ((access_status = run_post_read_request(r))) {
  +        die(access_status, r);
  +        return NULL;
       }
   
       return r;
  @@ -964,55 +971,57 @@
    * *someone* has to set the protocol-specific fields...
    */
   
  -void set_sub_req_protocol (request_rec *rnew, const request_rec *r)
  +void set_sub_req_protocol(request_rec *rnew, const request_rec *r)
   {
  -    rnew->the_request = r->the_request;  /* Keep original request-line */
  +    rnew->the_request     = r->the_request;  /* Keep original request-line */
  +
  +    rnew->assbackwards    = 1;   /* Don't send headers from this. */
  +    rnew->no_local_copy   = 1;   /* Don't try to send USE_LOCAL_COPY for a
  +                                  * fragment. */
  +    rnew->method          = "GET";
  +    rnew->method_number   = M_GET;
  +    rnew->protocol        = "INCLUDED";
  +
  +    rnew->status          = HTTP_OK;
   
  -    rnew->assbackwards = 1;	/* Don't send headers from this. */
  -    rnew->no_local_copy = 1;	/* Don't try to send USE_LOCAL_COPY for a
  -				 * fragment.
  -				 */
  -    rnew->method = "GET"; rnew->method_number = M_GET;
  -    rnew->protocol = "INCLUDED";
  +    rnew->headers_in      = r->headers_in;
  +    rnew->subprocess_env  = copy_table(rnew->pool, r->subprocess_env);
  +    rnew->headers_out     = make_table(rnew->pool, 5);
  +    rnew->err_headers_out = make_table(rnew->pool, 5);
  +    rnew->notes           = make_table(rnew->pool, 5);
   
  -    rnew->status = HTTP_OK;
  +    rnew->read_length     = r->read_length;
  +    rnew->read_body       = REQUEST_NO_BODY;
   
  -    rnew->headers_in = r->headers_in;
  -    rnew->subprocess_env = copy_table (rnew->pool, r->subprocess_env);
  -    rnew->headers_out = make_table (rnew->pool, 5);
  -    rnew->err_headers_out = make_table (rnew->pool, 5);
  -    rnew->notes = make_table (rnew->pool, 5);
  -    
  -    rnew->read_length = r->read_length;
  -    rnew->read_body   = REQUEST_NO_BODY;
  -    
  -    rnew->main = (request_rec *)r;
  +    rnew->main = (request_rec *) r;
   }
   
  -void finalize_sub_req_protocol (request_rec *sub)
  +void finalize_sub_req_protocol(request_rec *sub)
   {
  -    SET_BYTES_SENT (sub->main);
  -} 
  +    SET_BYTES_SENT(sub->main);
  +}
   
  -/* Support for the Basic authentication protocol, and a bit for Digest.
  +/*
  + * Support for the Basic authentication protocol, and a bit for Digest.
    */
   
   API_EXPORT(void) note_auth_failure(request_rec *r)
   {
       if (!strcasecmp(auth_type(r), "Basic"))
  -      note_basic_auth_failure(r);
  -    else if(!strcasecmp(auth_type(r), "Digest"))
  -      note_digest_auth_failure(r);
  +        note_basic_auth_failure(r);
  +    else if (!strcasecmp(auth_type(r), "Digest"))
  +        note_digest_auth_failure(r);
   }
   
   API_EXPORT(void) note_basic_auth_failure(request_rec *r)
   {
       if (strcasecmp(auth_type(r), "Basic"))
  -      note_auth_failure(r);
  +        note_auth_failure(r);
       else
  -      table_set (r->err_headers_out, r->proxyreq ? "Proxy-Authenticate" : 
  -		                                   "WWW-Authenticate",
  -		 pstrcat(r->pool, "Basic realm=\"", auth_name(r), "\"", NULL));
  +        table_set(r->err_headers_out,
  +                  r->proxyreq ? "Proxy-Authenticate" : "WWW-Authenticate",
  +                  pstrcat(r->pool, "Basic realm=\"", auth_name(r), "\"",
  +                          NULL));
   }
   
   API_EXPORT(void) note_digest_auth_failure(request_rec *r)
  @@ -1020,38 +1029,39 @@
       char nonce[256];
   
       ap_snprintf(nonce, sizeof(nonce), "%lu", r->request_time);
  -    table_set (r->err_headers_out, r->proxyreq ? "Proxy-Authenticate" : 
  -		                                 "WWW-Authenticate",
  -               pstrcat(r->pool, "Digest realm=\"", auth_name(r),
  -                       "\", nonce=\"", nonce, "\"", NULL));
  +    table_set(r->err_headers_out,
  +              r->proxyreq ? "Proxy-Authenticate" : "WWW-Authenticate",
  +              pstrcat(r->pool, "Digest realm=\"", auth_name(r),
  +                      "\", nonce=\"", nonce, "\"", NULL));
   }
   
  -API_EXPORT(int) get_basic_auth_pw (request_rec *r, char **pw)
  +API_EXPORT(int) get_basic_auth_pw(request_rec *r, char **pw)
   {
  -    const char *auth_line = table_get(r->headers_in, r->proxyreq ? 
  -				                      "Proxy-Authorization" :
  -	                                              "Authorization");
  +    const char *auth_line = table_get(r->headers_in,
  +                                      r->proxyreq ? "Proxy-Authorization"
  +                                                  : "Authorization");
       char *t;
  -    
  -    if(!(t = auth_type(r)) || strcasecmp(t, "Basic"))
  +
  +    if (!(t = auth_type(r)) || strcasecmp(t, "Basic"))
           return DECLINED;
   
       if (!auth_name(r)) {
  -        aplog_error(APLOG_MARK, APLOG_ERR, r->server, "need AuthName: %s", r->uri);
  -	return SERVER_ERROR;
  +        aplog_error(APLOG_MARK, APLOG_ERR, r->server, "need AuthName: %s",
  +                    r->uri);
  +        return SERVER_ERROR;
       }
  -    
  +
       if (!auth_line) {
  -        note_basic_auth_failure (r);
  -	return AUTH_REQUIRED;
  +        note_basic_auth_failure(r);
  +        return AUTH_REQUIRED;
       }
   
  -    if (strcmp(getword (r->pool, &auth_line, ' '), "Basic")) {
  +    if (strcmp(getword(r->pool, &auth_line, ' '), "Basic")) {
           /* Client tried to authenticate using wrong auth scheme */
           aplog_error(APLOG_MARK, APLOG_ERR, r->server,
  -		    "client used wrong authentication scheme: %s", r->uri);
  +                    "client used wrong authentication scheme: %s", r->uri);
           note_basic_auth_failure(r);
  -	return AUTH_REQUIRED;
  +        return AUTH_REQUIRED;
       }
   
       t = uudecode(r->pool, auth_line);
  @@ -1063,56 +1073,56 @@
       return OK;
   }
   
  -/* New Apache routine to map status codes into array indicies 
  - *  e.g.  100 -> 0,  101 -> 1,  200 -> 2 ...                     
  +/* New Apache routine to map status codes into array indicies
  + *  e.g.  100 -> 0,  101 -> 1,  200 -> 2 ...
    * The number of status lines must equal the value of RESPONSE_CODES (httpd.h)
    * and must be listed in order.
    */
   
   static char *status_lines[] = {
  -   "100 Continue",
  -   "101 Switching Protocols",
  +    "100 Continue",
  +    "101 Switching Protocols",
   #define LEVEL_200  2
  -   "200 OK",
  -   "201 Created",
  -   "202 Accepted",
  -   "203 Non-Authoritative Information",
  -   "204 No Content",
  -   "205 Reset Content",
  -   "206 Partial Content",
  +    "200 OK",
  +    "201 Created",
  +    "202 Accepted",
  +    "203 Non-Authoritative Information",
  +    "204 No Content",
  +    "205 Reset Content",
  +    "206 Partial Content",
   #define LEVEL_300  9
  -   "300 Multiple Choices",
  -   "301 Moved Permanently",
  -   "302 Moved Temporarily",
  -   "303 See Other",
  -   "304 Not Modified",
  -   "305 Use Proxy",
  +    "300 Multiple Choices",
  +    "301 Moved Permanently",
  +    "302 Moved Temporarily",
  +    "303 See Other",
  +    "304 Not Modified",
  +    "305 Use Proxy",
   #define LEVEL_400 15
  -   "400 Bad Request",
  -   "401 Authorization Required",
  -   "402 Payment Required",
  -   "403 Forbidden",
  -   "404 Not Found",
  -   "405 Method Not Allowed",
  -   "406 Not Acceptable",
  -   "407 Proxy Authentication Required",
  -   "408 Request Time-out",
  -   "409 Conflict",
  -   "410 Gone",
  -   "411 Length Required",
  -   "412 Precondition Failed",
  -   "413 Request Entity Too Large",
  -   "414 Request-URI Too Large",
  -   "415 Unsupported Media Type",
  +    "400 Bad Request",
  +    "401 Authorization Required",
  +    "402 Payment Required",
  +    "403 Forbidden",
  +    "404 Not Found",
  +    "405 Method Not Allowed",
  +    "406 Not Acceptable",
  +    "407 Proxy Authentication Required",
  +    "408 Request Time-out",
  +    "409 Conflict",
  +    "410 Gone",
  +    "411 Length Required",
  +    "412 Precondition Failed",
  +    "413 Request Entity Too Large",
  +    "414 Request-URI Too Large",
  +    "415 Unsupported Media Type",
   #define LEVEL_500 31
  -   "500 Internal Server Error",
  -   "501 Method Not Implemented",
  -   "502 Bad Gateway",
  -   "503 Service Temporarily Unavailable",
  -   "504 Gateway Time-out",
  -   "505 HTTP Version Not Supported",
  -   "506 Variant Also Varies"
  -}; 
  +    "500 Internal Server Error",
  +    "501 Method Not Implemented",
  +    "502 Bad Gateway",
  +    "503 Service Temporarily Unavailable",
  +    "504 Gateway Time-out",
  +    "505 HTTP Version Not Supported",
  +    "506 Variant Also Varies"
  +};
   
   /* The index is found by its offset from the x00 code of each level.
    * Although this is fast, it will need to be replaced if some nutcase
  @@ -1120,27 +1130,26 @@
    * If that sad event occurs, replace the code below with a linear search
    * from status_lines[shortcut[i]] to status_lines[shortcut[i+1]-1];
    */
  -
   int index_of_response(int status)
   {
  -    static int shortcut[6] = { 0, LEVEL_200, LEVEL_300, LEVEL_400,
  -                               LEVEL_500, RESPONSE_CODES };
  +    static int shortcut[6] = {0, LEVEL_200, LEVEL_300, LEVEL_400,
  +    LEVEL_500, RESPONSE_CODES};
       int i, pos;
   
  -    if (status < 100)          /* Below 100 is illegal for HTTP status */
  +    if (status < 100)           /* Below 100 is illegal for HTTP status */
           return LEVEL_500;
   
       for (i = 0; i < 5; i++) {
           status -= 100;
           if (status < 100) {
               pos = (status + shortcut[i]);
  -            if (pos < shortcut[i+1])
  +            if (pos < shortcut[i + 1])
                   return pos;
               else
  -                return LEVEL_500;     /* status unknown (falls in gap) */
  +                return LEVEL_500;       /* status unknown (falls in gap) */
           }
       }
  -   return LEVEL_500;                  /* 600 or above is also illegal */
  +    return LEVEL_500;           /* 600 or above is also illegal */
   }
   
   /* Send a single HTTP header field to the client.  Note that this function
  @@ -1148,19 +1157,20 @@
    * In other words, don't change this one without checking table_do in alloc.c.
    * It returns true unless there was a write error of some kind.
    */
  -int send_header_field (request_rec *r, const char *fieldname,
  -                                       const char *fieldval)
  +int send_header_field(request_rec *r, const char *fieldname,
  +                      const char *fieldval)
   {
       return (0 < bvputs(r->connection->client,
                          fieldname, ": ", fieldval, "\015\012", NULL));
   }
   
  -void basic_http_header (request_rec *r)
  +void basic_http_header(request_rec *r)
   {
       char *protocol;
  -    
  -    if (r->assbackwards) return;
  -    
  +
  +    if (r->assbackwards)
  +        return;
  +
       if (!r->status_line)
           r->status_line = status_lines[index_of_response(r->status)];
   
  @@ -1168,14 +1178,14 @@
        * kluge around broken browsers when indicated by force-response-1.0
        */
       if (r->proxyreq
  -	|| (r->proto_num == 1000
  -	    && table_get(r->subprocess_env,"force-response-1.0"))) {
  +        || (r->proto_num == 1000
  +            && table_get(r->subprocess_env, "force-response-1.0"))) {
   
  -	protocol = "HTTP/1.0";
  -	r->connection->keepalive = -1;
  +        protocol = "HTTP/1.0";
  +        r->connection->keepalive = -1;
       }
       else
  -	protocol = SERVER_PROTOCOL;
  +        protocol = SERVER_PROTOCOL;
   
       /* Output the HTTP/1.x Status-Line and the Date and Server fields */
   
  @@ -1185,7 +1195,7 @@
       send_header_field(r, "Date", gm_timestr_822(r->pool, r->request_time));
       send_header_field(r, "Server", SERVER_VERSION);
   
  -    table_unset(r->headers_out, "Date");    /* Avoid bogosity */
  +    table_unset(r->headers_out, "Date");        /* Avoid bogosity */
       table_unset(r->headers_out, "Server");
   }
   
  @@ -1206,7 +1216,7 @@
    * It is more expensive to check the User-Agent than it is to just add the
    * bytes, so we haven't used the BrowserMatch feature here.
    */
  -static void terminate_header (BUFF *client)
  +static void terminate_header(BUFF *client)
   {
       long int bs;
   
  @@ -1214,7 +1224,7 @@
       if (bs == 256 || bs == 257)
           bputs("X-Pad: avoid browser bug\015\012", client);
   
  -    bputs("\015\012", client);    /* Send the terminating empty line */
  +    bputs("\015\012", client);  /* Send the terminating empty line */
   }
   
   /* Build the Allow field-value from the request handler method mask.
  @@ -1232,12 +1242,13 @@
                          NULL);
   }
   
  -int send_http_trace (request_rec *r)
  +int send_http_trace(request_rec *r)
   {
       int rv;
   
       /* Get the original request */
  -    while (r->prev) r = r->prev;
  +    while (r->prev)
  +        r = r->prev;
   
       if ((rv = setup_client_block(r, REQUEST_NO_BODY)))
           return rv;
  @@ -1246,13 +1257,13 @@
   
       r->content_type = "message/http";
       send_http_header(r);
  -    
  +
       /* Now we recreate the request, and echo it back */
   
  -    rvputs( r, r->the_request, "\015\012", NULL );
  +    rvputs(r, r->the_request, "\015\012", NULL);
   
  -    table_do((int (*)(void *, const char *, const char *))send_header_field,
  -             (void *)r, r->headers_in, NULL);
  +    table_do((int (*) (void *, const char *, const char *)) send_header_field,
  +             (void *) r, r->headers_in, NULL);
       bputs("\015\012", r->connection->client);
   
       kill_timeout(r);
  @@ -1263,7 +1274,8 @@
   {
       const long int zero = 0L;
   
  -    if (r->assbackwards) return DECLINED;
  +    if (r->assbackwards)
  +        return DECLINED;
   
       hard_timeout("send OPTIONS", r);
   
  @@ -1273,8 +1285,8 @@
       table_set(r->headers_out, "Allow", make_allow(r));
       set_keepalive(r);
   
  -    table_do((int (*)(void *, const char *, const char *))send_header_field,
  -             (void *)r, r->headers_out, NULL);
  +    table_do((int (*) (void *, const char *, const char *)) send_header_field,
  +             (void *) r, r->headers_out, NULL);
   
       terminate_header(r->connection->client);
   
  @@ -1291,34 +1303,35 @@
    * that the browser supports an older protocol. We also check User-Agent
    * for Microsoft Internet Explorer 3, which needs this as well.
    */
  -
  -static int use_range_x(request_rec *r) {
  +static int use_range_x(request_rec *r)
  +{
       char *ua;
       return (table_get(r->headers_in, "Request-Range") ||
  -	    ((ua = table_get(r->headers_in, "User-Agent"))
  -	     && strstr(ua, "MSIE 3")));
  +            ((ua = table_get(r->headers_in, "User-Agent"))
  +             && strstr(ua, "MSIE 3")));
   }
   
   API_EXPORT(void) send_http_header(request_rec *r)
   {
       int i;
       const long int zero = 0L;
  -  
  +
       if (r->assbackwards) {
  -        if(!r->main)
  -	    bsetopt(r->connection->client, BO_BYTECT, &zero);
  -	r->sent_bodyct = 1;
  -	return;
  +        if (!r->main)
  +            bsetopt(r->connection->client, BO_BYTECT, &zero);
  +        r->sent_bodyct = 1;
  +        return;
       }
   
  -    /* Now that we are ready to send a response, we need to combine the two
  +    /*
  +     * Now that we are ready to send a response, we need to combine the two
        * header field tables into a single table.  If we don't do this, our
        * later attempts to set or unset a given fieldname might be bypassed.
        */
       if (!is_empty_table(r->err_headers_out))
           r->headers_out = overlay_tables(r->pool, r->err_headers_out,
  -                                                 r->headers_out);
  -    
  +                                        r->headers_out);
  +
       hard_timeout("send headers", r);
   
       basic_http_header(r);
  @@ -1338,21 +1351,22 @@
           table_set(r->headers_out, "Content-Type", r->content_type);
       else
           table_set(r->headers_out, "Content-Type", default_type(r));
  -    
  +
       if (r->content_encoding)
           table_set(r->headers_out, "Content-Encoding", r->content_encoding);
  -    
  +
       if (r->content_languages && r->content_languages->nelts) {
           for (i = 0; i < r->content_languages->nelts; ++i) {
               table_merge(r->headers_out, "Content-Language",
  -                        ((char**)(r->content_languages->elts))[i]);
  +                        ((char **) (r->content_languages->elts))[i]);
           }
       }
       else if (r->content_language)
           table_set(r->headers_out, "Content-Language", r->content_language);
   
  -    /* Control cachability for non-cachable responses if not already set
  -     * by some other part of the server configuration.
  +    /*
  +     * Control cachability for non-cachable responses if not already set by
  +     * some other part of the server configuration.
        */
       if (r->no_cache && !table_get(r->headers_out, "Expires"))
           table_add(r->headers_out, "Expires",
  @@ -1360,18 +1374,19 @@
   
       /* Send the entire table of header fields, terminated by an empty line. */
   
  -    table_do((int (*)(void *, const char *, const char *))send_header_field,
  -             (void *)r, r->headers_out, NULL);
  +    table_do((int (*) (void *, const char *, const char *)) send_header_field,
  +             (void *) r, r->headers_out, NULL);
   
       terminate_header(r->connection->client);
   
       kill_timeout(r);
   
       bsetopt(r->connection->client, BO_BYTECT, &zero);
  -    r->sent_bodyct = 1;		/* Whatever follows is real body stuff... */
  +    r->sent_bodyct = 1;         /* Whatever follows is real body stuff... */
   
       /* Set buffer flags for the body */
  -    if (r->chunked) bsetflag(r->connection->client, B_CHUNK, 1);
  +    if (r->chunked)
  +        bsetflag(r->connection->client, B_CHUNK, 1);
   }
   
   /* finalize_request_protocol is called at completion of sending the
  @@ -1379,7 +1394,7 @@
    * information for any wrappers around the response message body
    * (i.e., transfer encodings).  It should have been named finalize_response.
    */
  -void finalize_request_protocol (request_rec *r)
  +void finalize_request_protocol(request_rec *r)
   {
       if (r->chunked && !r->connection->aborted) {
           /*
  @@ -1435,24 +1450,24 @@
    *    If an error occurs on input, we force an end to keepalive.
    */
   
  -API_EXPORT(int) setup_client_block (request_rec *r, int read_policy)
  +API_EXPORT(int) setup_client_block(request_rec *r, int read_policy)
   {
       char *tenc = table_get(r->headers_in, "Transfer-Encoding");
       char *lenp = table_get(r->headers_in, "Content-Length");
   
  -    r->read_body    = read_policy;
  +    r->read_body = read_policy;
       r->read_chunked = 0;
  -    r->remaining    = 0;
  +    r->remaining = 0;
   
       if (tenc) {
           if (strcasecmp(tenc, "chunked")) {
               aplog_error(APLOG_MARK, APLOG_ERR, r->server,
  -			"Unknown Transfer-Encoding %s", tenc);
  +                        "Unknown Transfer-Encoding %s", tenc);
               return HTTP_BAD_REQUEST;
           }
           if (r->read_body == REQUEST_CHUNKED_ERROR) {
               aplog_error(APLOG_MARK, APLOG_ERR, r->server,
  -			"chunked Transfer-Encoding forbidden: %s", r->uri);
  +                        "chunked Transfer-Encoding forbidden: %s", r->uri);
               return (lenp) ? HTTP_BAD_REQUEST : HTTP_LENGTH_REQUIRED;
           }
   
  @@ -1461,10 +1476,11 @@
       else if (lenp) {
           char *pos = lenp;
   
  -        while (isdigit(*pos) || isspace(*pos)) ++pos;
  +        while (isdigit(*pos) || isspace(*pos))
  +            ++pos;
           if (*pos != '\0') {
               aplog_error(APLOG_MARK, APLOG_ERR, r->server,
  -			"Invalid Content-Length %s", lenp);
  +                        "Invalid Content-Length %s", lenp);
               return HTTP_BAD_REQUEST;
           }
   
  @@ -1474,14 +1490,14 @@
       if ((r->read_body == REQUEST_NO_BODY) &&
           (r->read_chunked || (r->remaining > 0))) {
           aplog_error(APLOG_MARK, APLOG_ERR, r->server,
  -		    "%s with body is not allowed for %s", r->method, r->uri);
  +                    "%s with body is not allowed for %s", r->method, r->uri);
           return HTTP_REQUEST_ENTITY_TOO_LARGE;
       }
   
       return OK;
   }
   
  -API_EXPORT(int) should_client_block (request_rec *r)
  +API_EXPORT(int) should_client_block(request_rec *r)
   {
       if (r->read_length || is_HTTP_ERROR(r->status))
           return 0;
  @@ -1489,25 +1505,29 @@
       if (!r->read_chunked && (r->remaining <= 0))
           return 0;
   
  -    if (r->proto_num >= 1001) {    /* sending 100 Continue interim response */
  +    if (r->proto_num >= 1001) { /* sending 100 Continue interim response */
           bvputs(r->connection->client,
  -            SERVER_PROTOCOL, " ", status_lines[0], "\015\012\015\012", NULL);
  +               SERVER_PROTOCOL, " ", status_lines[0], "\015\012\015\012",
  +               NULL);
           bflush(r->connection->client);
       }
   
       return 1;
   }
   
  -static long get_chunk_size (char *b)
  +static long get_chunk_size(char *b)
   {
       long chunksize = 0;
   
       while (isxdigit(*b)) {
           int xvalue = 0;
   
  -        if (*b >= '0' && *b <= '9')      xvalue = *b - '0';
  -        else if (*b >= 'A' && *b <= 'F') xvalue = *b - 'A' + 0xa;
  -        else if (*b >= 'a' && *b <= 'f') xvalue = *b - 'a' + 0xa;
  +        if (*b >= '0' && *b <= '9')
  +            xvalue = *b - '0';
  +        else if (*b >= 'A' && *b <= 'F')
  +            xvalue = *b - 'A' + 0xa;
  +        else if (*b >= 'a' && *b <= 'f')
  +            xvalue = *b - 'a' + 0xa;
   
           chunksize = (chunksize << 4) | xvalue;
           ++b;
  @@ -1529,45 +1549,47 @@
    * hold a chunk-size line, including any extensions. For now, we'll leave
    * that to the caller, at least until we can come up with a better solution.
    */
  -API_EXPORT(long) get_client_block (request_rec *r, char *buffer, int bufsiz)
  +API_EXPORT(long) get_client_block(request_rec *r, char *buffer, int bufsiz)
   {
       int c;
       long len_read, len_to_read;
       long chunk_start = 0;
   
  -    if (!r->read_chunked) {                 /* Content-length read */
  +    if (!r->read_chunked) {     /* Content-length read */
           len_to_read = (r->remaining > bufsiz) ? bufsiz : r->remaining;
           len_read = bread(r->connection->client, buffer, len_to_read);
           if (len_read <= 0) {
  -            if (len_read < 0) r->connection->keepalive = -1;
  +            if (len_read < 0)
  +                r->connection->keepalive = -1;
               return len_read;
           }
           r->read_length += len_read;
  -        r->remaining   -= len_read;
  +        r->remaining -= len_read;
           return len_read;
       }
   
  -    /* Handle chunked reading
  -     * Note: we are careful to shorten the input bufsiz so that there
  -     * will always be enough space for us to add a CRLF (if necessary).
  +    /*
  +     * Handle chunked reading Note: we are careful to shorten the input
  +     * bufsiz so that there will always be enough space for us to add a CRLF
  +     * (if necessary).
        */
       if (r->read_body == REQUEST_CHUNKED_PASS)
           bufsiz -= 2;
       if (bufsiz <= 0)
  -        return -1;             /* Cannot read chunked with a small buffer */
  +        return -1;              /* Cannot read chunked with a small buffer */
   
  -    if (r->remaining == 0) {         /* Start of new chunk */
  +    if (r->remaining == 0) {    /* Start of new chunk */
   
           chunk_start = getline(buffer, bufsiz, r->connection->client, 0);
           if ((chunk_start <= 0) || (chunk_start >= (bufsiz - 1))
  -                               || !isxdigit(*buffer)) {
  +            || !isxdigit(*buffer)) {
               r->connection->keepalive = -1;
               return -1;
           }
   
           len_to_read = get_chunk_size(buffer);
   
  -        if (len_to_read == 0) {      /* Last chunk indicated, get footers */
  +        if (len_to_read == 0) { /* Last chunk indicated, get footers */
               if (r->read_body == REQUEST_CHUNKED_DECHUNK) {
                   get_mime_headers(r);
                   ap_snprintf(buffer, bufsiz, "%ld", r->read_length);
  @@ -1575,43 +1597,45 @@
                   table_set(r->headers_in, "Content-Length", buffer);
                   return 0;
               }
  -            r->remaining = -1;       /* Indicate footers in-progress */
  +            r->remaining = -1;  /* Indicate footers in-progress */
           }
           else {
               r->remaining = len_to_read;
           }
           if (r->read_body == REQUEST_CHUNKED_PASS) {
  -            buffer[chunk_start++] = CR;  /* Restore chunk-size line end  */
  +            buffer[chunk_start++] = CR; /* Restore chunk-size line end  */
               buffer[chunk_start++] = LF;
  -            buffer += chunk_start;       /* and pass line on to caller   */
  +            buffer += chunk_start;      /* and pass line on to caller   */
               bufsiz -= chunk_start;
  -        } else {
  -	    /* REQUEST_CHUNKED_DECHUNK -- do not include the length of
  -	     * the header in the return value */
  -	    chunk_start = 0;
  -	}
  +        }
  +        else {
  +            /* REQUEST_CHUNKED_DECHUNK -- do not include the length of the
  +             * header in the return value
  +             */
  +            chunk_start = 0;
  +        }
       }
  -                                     /* When REQUEST_CHUNKED_PASS, we are */
  -    if (r->remaining == -1) {        /* reading footers until empty line  */
  +                                /* When REQUEST_CHUNKED_PASS, we are */
  +    if (r->remaining == -1) {   /* reading footers until empty line  */
           len_read = chunk_start;
   
           while ((bufsiz > 1) && ((len_read =
  -                getline(buffer, bufsiz, r->connection->client, 1)) > 0)) {
  +                  getline(buffer, bufsiz, r->connection->client, 1)) > 0)) {
   
               if (len_read != (bufsiz - 1)) {
  -                buffer[len_read++] = CR;  /* Restore footer line end  */
  +                buffer[len_read++] = CR;        /* Restore footer line end  */
                   buffer[len_read++] = LF;
               }
               chunk_start += len_read;
  -            buffer      += len_read;
  -            bufsiz      -= len_read;
  +            buffer += len_read;
  +            bufsiz -= len_read;
           }
           if (len_read < 0) {
               r->connection->keepalive = -1;
               return -1;
           }
   
  -        if (len_read == 0) {         /* Indicates an empty line */
  +        if (len_read == 0) {    /* Indicates an empty line */
               buffer[0] = CR;
               buffer[1] = LF;
               chunk_start += 2;
  @@ -1620,16 +1644,16 @@
           r->read_length += chunk_start;
           return chunk_start;
       }
  -                                     /* When REQUEST_CHUNKED_PASS, we     */
  -    if (r->remaining == -2) {        /* finished footers when last called */
  -        r->remaining = 0;            /*     so now we must signal EOF     */
  +                                /* When REQUEST_CHUNKED_PASS, we     */
  +    if (r->remaining == -2) {   /* finished footers when last called */
  +        r->remaining = 0;       /* so now we must signal EOF         */
           return 0;
       }
   
       /* Otherwise, we are in the midst of reading a chunk of data */
   
       len_to_read = (r->remaining > bufsiz) ? bufsiz : r->remaining;
  -    
  +
       len_read = bread(r->connection->client, buffer, len_to_read);
       if (len_read <= 0) {
           r->connection->keepalive = -1;
  @@ -1638,9 +1662,9 @@
   
       r->remaining -= len_read;
   
  -    if (r->remaining == 0) {         /* End of chunk, get trailing CRLF */
  +    if (r->remaining == 0) {    /* End of chunk, get trailing CRLF */
           if ((c = bgetc(r->connection->client)) == CR) {
  -           c = bgetc(r->connection->client);
  +            c = bgetc(r->connection->client);
           }
           if (c != LF) {
               r->connection->keepalive = -1;
  @@ -1661,7 +1685,7 @@
    * This helper routine tests for and reads any message body in the request,
    * simply discarding whatever it receives.  We need to do this because
    * failing to read the request body would cause it to be interpreted
  - * as the next request on a persistent connection.  
  + * as the next request on a persistent connection.
    *
    * Since we return an error status if the request is malformed, this
    * routine should be called at the beginning of a no-body handler, e.g.,
  @@ -1693,7 +1717,8 @@
   /*
    * Send the body of a response to the client.
    */
  -API_EXPORT(long) send_fd(FILE *f, request_rec *r) {
  +API_EXPORT(long) send_fd(FILE *f, request_rec *r)
  +{
       return send_fd_length(f, r, -1);
   }
   
  @@ -1702,32 +1727,34 @@
       char buf[IOBUFSIZE];
       long total_bytes_sent = 0;
       register int n, w, o, len;
  -    
  -    if (length == 0) return 0;
  +
  +    if (length == 0)
  +        return 0;
   
       soft_timeout("send body", r);
   
       while (!r->connection->aborted) {
  -	if ((length > 0) && (total_bytes_sent + IOBUFSIZE) > length)
  -	    len = length - total_bytes_sent;
  -	else len = IOBUFSIZE;
  -
  -        while ((n= fread(buf, sizeof(char), len, f)) < 1
  -	       && ferror(f) && errno == EINTR && !r->connection->aborted)
  -	    continue;
  -	
  -	if (n < 1) {
  +        if ((length > 0) && (total_bytes_sent + IOBUFSIZE) > length)
  +            len = length - total_bytes_sent;
  +        else
  +            len = IOBUFSIZE;
  +
  +        while ((n = fread(buf, sizeof(char), len, f)) < 1
  +               && ferror(f) && errno == EINTR && !r->connection->aborted)
  +            continue;
  +
  +        if (n < 1) {
               break;
           }
  -        o=0;
  -	total_bytes_sent += n;
  +        o = 0;
  +        total_bytes_sent += n;
   
           while (n && !r->connection->aborted) {
               w = bwrite(r->connection->client, &buf[o], n);
               if (w > 0) {
  -                reset_timeout(r); /* reset timeout after successful write */
  -                n-=w;
  -                o+=w;
  +                reset_timeout(r);   /* reset timeout after successful write */
  +                n -= w;
  +                o += w;
               }
               else if (w < 0) {
                   if (r->connection->aborted)
  @@ -1736,9 +1763,10 @@
                       continue;
                   else {
                       aplog_error(APLOG_MARK, APLOG_DEBUG, r->server,
  -				"send body lost connection to %s",
  +                                "send body lost connection to %s",
                                   get_remote_host(r->connection,
  -						r->per_dir_config, REMOTE_NAME));
  +                                                r->per_dir_config,
  +                                                REMOTE_NAME));
                       bsetflag(r->connection->client, B_EOUT, 1);
                       r->connection->aborted = 1;
                       break;
  @@ -1746,7 +1774,7 @@
               }
           }
       }
  -    
  +
       kill_timeout(r);
       SET_BYTES_SENT(r);
       return total_bytes_sent;
  @@ -1755,7 +1783,8 @@
   /*
    * Send the body of a response to the client.
    */
  -API_EXPORT(long) send_fb(BUFF *fb, request_rec *r) {
  +API_EXPORT(long) send_fb(BUFF *fb, request_rec *r)
  +{
       return send_fb_length(fb, r, -1);
   }
   
  @@ -1765,48 +1794,54 @@
       long total_bytes_sent = 0;
       register int n, w, o, len, fd;
       fd_set fds;
  -    
  -    if (length == 0) return 0;
  +
  +    if (length == 0)
  +        return 0;
   
       /* Make fb unbuffered and non-blocking */
  -    bsetflag (fb, B_RD, 0);
  -    bnonblock (fb, B_RD);
  -    fd = bfileno (fb, B_RD);
  +    bsetflag(fb, B_RD, 0);
  +    bnonblock(fb, B_RD);
  +    fd = bfileno(fb, B_RD);
   
       soft_timeout("send body", r);
   
       while (!r->connection->aborted) {
  -	if ((length > 0) && (total_bytes_sent + IOBUFSIZE) > length)
  -	    len = length - total_bytes_sent;
  -	else len = IOBUFSIZE;
  -
  -	do {
  -	    n = bread (fb, buf, len);
  -	    if (n >= 0) break;
  -	    if (n < 0 && errno != EAGAIN) break;
  -	    /* we need to block, so flush the output first */
  -	    bflush (r->connection->client);
  -	    FD_ZERO (&fds);
  -	    FD_SET (fd, &fds);
  -	    /* we don't care what select says, we might as well loop back
  -	     * around and try another read
  -	     */
  -	    ap_select (fd+1, &fds, NULL, NULL, NULL);
  -	} while (!r->connection->aborted);
  -
  -	if (n < 1 || r->connection->aborted) {
  -	    break;
  -	}
  +        if ((length > 0) && (total_bytes_sent + IOBUFSIZE) > length)
  +            len = length - total_bytes_sent;
  +        else
  +            len = IOBUFSIZE;
  +
  +        do {
  +            n = bread(fb, buf, len);
  +            if (n >= 0)
  +                break;
  +            if (n < 0 && errno != EAGAIN)
  +                break;
  +            /* we need to block, so flush the output first */
  +            bflush(r->connection->client);
  +            FD_ZERO(&fds);
  +            FD_SET(fd, &fds);
  +            /*
  +             * we don't care what select says, we might as well loop back
  +             * around and try another read
  +             */
  +            ap_select(fd + 1, &fds, NULL, NULL, NULL);
  +        } while (!r->connection->aborted);
   
  -        o=0;
  -	total_bytes_sent += n;
  +        if (n < 1 || r->connection->aborted) {
  +            break;
  +        }
  +
  +        o = 0;
  +        total_bytes_sent += n;
   
           while (n && !r->connection->aborted) {
               w = bwrite(r->connection->client, &buf[o], n);
               if (w > 0) {
  -                reset_timeout(r); /* reset timeout after successful write */
  -                n-=w;
  -                o+=w;
  +                reset_timeout(r);       /* reset timeout after successful
  +                                         * write */
  +                n -= w;
  +                o += w;
               }
               else if (w < 0) {
                   if (r->connection->aborted)
  @@ -1815,9 +1850,10 @@
                       continue;
                   else {
                       aplog_error(APLOG_MARK, APLOG_DEBUG, r->server,
  -				"send body lost connection to %s",
  +                                "send body lost connection to %s",
                                   get_remote_host(r->connection,
  -						r->per_dir_config, REMOTE_NAME));
  +                                                r->per_dir_config,
  +                                                REMOTE_NAME));
                       bsetflag(r->connection->client, B_EOUT, 1);
                       r->connection->aborted = 1;
                       break;
  @@ -1843,33 +1879,35 @@
    * multiple of 16k.  (And you need a SunATM2.0 network card.)
    */
   #ifndef MMAP_SEGMENT_SIZE
  -#define MMAP_SEGMENT_SIZE	32768
  +#define MMAP_SEGMENT_SIZE       32768
   #endif
   
   /* send data from an in-memory buffer */
  -API_EXPORT(size_t) send_mmap(void * mm, request_rec *r, size_t offset,
  -    size_t length)
  +API_EXPORT(size_t) send_mmap(void *mm, request_rec *r, size_t offset,
  +                             size_t length)
   {
       size_t total_bytes_sent = 0;
       int n, w;
  -    
  -    if (length == 0) return 0;
  +
  +    if (length == 0)
  +        return 0;
   
       soft_timeout("send mmap", r);
   
       length += offset;
       while (!r->connection->aborted && offset < length) {
  -	if (length - offset > MMAP_SEGMENT_SIZE) {
  -	    n = MMAP_SEGMENT_SIZE;
  -	} else {
  -	    n = length - offset;
  -	}
  +        if (length - offset > MMAP_SEGMENT_SIZE) {
  +            n = MMAP_SEGMENT_SIZE;
  +        }
  +        else {
  +            n = length - offset;
  +        }
   
           while (n && !r->connection->aborted) {
  -            w = bwrite(r->connection->client, (char *)mm + offset, n);
  +            w = bwrite(r->connection->client, (char *) mm + offset, n);
               if (w > 0) {
  -                reset_timeout(r); /* reset timeout after successful write */
  -		total_bytes_sent += w;
  +                reset_timeout(r);   /* reset timeout after successful write */
  +                total_bytes_sent += w;
                   n -= w;
                   offset += w;
               }
  @@ -1880,9 +1918,10 @@
                       continue;
                   else {
                       aplog_error(APLOG_MARK, APLOG_DEBUG, r->server,
  -				"send mmap lost connection to %s",
  +                                "send mmap lost connection to %s",
                                   get_remote_host(r->connection,
  -						r->per_dir_config, REMOTE_NAME));
  +                                                r->per_dir_config,
  +                                                REMOTE_NAME));
                       bsetflag(r->connection->client, B_EOUT, 1);
                       r->connection->aborted = 1;
                       break;
  @@ -1890,15 +1929,16 @@
               }
           }
       }
  -    
  +
       kill_timeout(r);
       SET_BYTES_SENT(r);
       return total_bytes_sent;
   }
   
  -API_EXPORT(int) rputc (int c, request_rec *r)
  +API_EXPORT(int) rputc(int c, request_rec *r)
   {
  -    if (r->connection->aborted) return EOF;
  +    if (r->connection->aborted)
  +        return EOF;
       bputc(c, r->connection->client);
       SET_BYTES_SENT(r);
       return c;
  @@ -1906,7 +1946,8 @@
   
   API_EXPORT(int) rputs(const char *str, request_rec *r)
   {
  -    if (r->connection->aborted) return EOF;
  +    if (r->connection->aborted)
  +        return EOF;
       SET_BYTES_SENT(r);
       return bputs(str, r->connection->client);
   }
  @@ -1914,47 +1955,49 @@
   API_EXPORT(int) rwrite(const void *buf, int nbyte, request_rec *r)
   {
       int n;
  -    if (r->connection->aborted) return EOF;
  -    n=bwrite(r->connection->client, buf, nbyte);
  +    if (r->connection->aborted)
  +        return EOF;
  +    n = bwrite(r->connection->client, buf, nbyte);
       SET_BYTES_SENT(r);
       return n;
   }
   
  -API_EXPORT(int) rprintf(request_rec *r,const char *fmt,...)
  +API_EXPORT(int) rprintf(request_rec *r, const char *fmt,...)
   {
       va_list vlist;
       int n;
   
  -    if(r->connection->aborted) return EOF;
  -    va_start(vlist,fmt);
  -    n=vbprintf(r->connection->client,fmt,vlist);
  +    if (r->connection->aborted)
  +        return EOF;
  +    va_start(vlist, fmt);
  +    n = vbprintf(r->connection->client, fmt, vlist);
       va_end(vlist);
       SET_BYTES_SENT(r);
       return n;
   }
   
  -API_EXPORT_NONSTD(int) rvputs(request_rec *r, ...)
  +API_EXPORT_NONSTD(int) rvputs(request_rec *r,...)
   {
       va_list args;
       int i, j, k;
       const char *x;
  -    BUFF *fb=r->connection->client;
  -    
  -    if (r->connection->aborted) return EOF;
  -    
  -    va_start (args, r);
  -    for (k=0;;)
  -    {
  -	x = va_arg(args, const char *);
  -	if (x == NULL) break;
  -	j = strlen(x);
  -	i = bwrite(fb, x, j);
  -	if (i != j)
  -	{
  -	    va_end(args);
  -	    return -1;
  -	}
  -	k += i;
  +    BUFF *fb = r->connection->client;
  +
  +    if (r->connection->aborted)
  +        return EOF;
  +
  +    va_start(args, r);
  +    for (k = 0;;) {
  +        x = va_arg(args, const char *);
  +        if (x == NULL)
  +            break;
  +        j = strlen(x);
  +        i = bwrite(fb, x, j);
  +        if (i != j) {
  +            va_end(args);
  +            return -1;
  +        }
  +        k += i;
       }
       va_end(args);
   
  @@ -1962,7 +2005,8 @@
       return k;
   }
   
  -API_EXPORT(int) rflush (request_rec *r) {
  +API_EXPORT(int) rflush(request_rec *r)
  +{
       return bflush(r->connection->client);
   }
   
  @@ -1972,11 +2016,11 @@
    * and 5xx (server error) messages that have not been redirected to another
    * handler via the ErrorDocument feature.
    */
  -void send_error_response (request_rec *r, int recursive_error)
  +void send_error_response(request_rec *r, int recursive_error)
   {
       BUFF *fd = r->connection->client;
       int status = r->status;
  -    int idx = index_of_response (status);
  +    int idx = index_of_response(status);
       char *custom_response;
       char *location = pstrdup(r->pool, table_get(r->headers_out, "Location"));
   
  @@ -1987,14 +2031,14 @@
       if (status == HTTP_NOT_MODIFIED) {
           if (!is_empty_table(r->err_headers_out))
               r->headers_out = overlay_tables(r->pool, r->err_headers_out,
  -                                                     r->headers_out);
  +                                            r->headers_out);
           hard_timeout("send 304", r);
   
           basic_http_header(r);
           set_keepalive(r);
   
           table_do((int (*)(void *, const char *, const char *))send_header_field,
  -                 (void *)r, r->headers_out,
  +                 (void *) r, r->headers_out,
                    "Connection",
                    "Keep-Alive",
                    "ETag",
  @@ -2004,7 +2048,7 @@
                    "Vary",
                    "Warning",
                    "WWW-Authenticate",
  -		 "Proxy-Authenticate",
  +                 "Proxy-Authenticate",
                    NULL);
   
           terminate_header(r->connection->client);
  @@ -2020,211 +2064,205 @@
       }
   
       if (!r->assbackwards) {
  -	table *tmp = r->headers_out;
  -  
  -	/* For all HTTP/1.x responses for which we generate the message,
  -	 * we need to avoid inheriting the "normal status" header fields
  -	 * that may have been set by the request handler before the
  -	 * error or redirect, except for Location on external redirects.
  -	 */
  -	r->headers_out = r->err_headers_out;
  -	r->err_headers_out = tmp;
  -	clear_table(r->err_headers_out);
  -
  -	if (location && *location
  -	             && (is_HTTP_REDIRECT(status) || status == HTTP_CREATED))
  -	    table_set(r->headers_out, "Location", location);
  -
  -	r->content_language = NULL;
  -	r->content_languages = NULL;
  -	r->content_encoding = NULL;
  -	r->clength = 0;
  -	r->content_type = "text/html";
  -
  -	if ((status == METHOD_NOT_ALLOWED) || (status == NOT_IMPLEMENTED))
  -	    table_set(r->headers_out, "Allow", make_allow(r));
  -
  -	send_http_header(r);
  -
  -	if (r->header_only) {
  -	    finalize_request_protocol(r);
  -	    return;
  -	}
  +        table *tmp = r->headers_out;
  +
  +        /* For all HTTP/1.x responses for which we generate the message,
  +         * we need to avoid inheriting the "normal status" header fields
  +         * that may have been set by the request handler before the
  +         * error or redirect, except for Location on external redirects.
  +         */
  +        r->headers_out = r->err_headers_out;
  +        r->err_headers_out = tmp;
  +        clear_table(r->err_headers_out);
  +
  +        if (location && *location
  +            && (is_HTTP_REDIRECT(status) || status == HTTP_CREATED))
  +            table_set(r->headers_out, "Location", location);
  +
  +        r->content_language = NULL;
  +        r->content_languages = NULL;
  +        r->content_encoding = NULL;
  +        r->clength = 0;
  +        r->content_type = "text/html";
  +
  +        if ((status == METHOD_NOT_ALLOWED) || (status == NOT_IMPLEMENTED))
  +            table_set(r->headers_out, "Allow", make_allow(r));
  +
  +        send_http_header(r);
  +
  +        if (r->header_only) {
  +            finalize_request_protocol(r);
  +            return;
  +        }
       }
  -    
  +
       hard_timeout("send error body", r);
   
  -    if ((custom_response = response_code_string (r, idx))) {
  +    if ((custom_response = response_code_string(r, idx))) {
           /*
  -	 * We have a custom response output. This should only be
  -	 * a text-string to write back. But if the ErrorDocument
  -	 * was a local redirect and the requested resource failed
  -	 * for any reason, the custom_response will still hold the
  -	 * redirect URL. We don't really want to output this URL
  -	 * as a text message, so first check the custom response 
  -	 * string to ensure that it is a text-string (using the
  -	 * same test used in die(), i.e. does it start with a
  -	 * "). If it doesn't, we've got a recursive error, so find
  -	 * the original error and output that as well.
  -	 */
  -	if (custom_response[0] == '\"') { 
  -	    bputs(custom_response+1, fd);
  -	    kill_timeout(r);
  -	    finalize_request_protocol(r);
  -	    return;
  -	}
  -	/* Redirect failed, so get back the original error
  -	 */
  -	while (r->prev && (r->prev->status != HTTP_OK))
  -	    r = r->prev;
  +         * We have a custom response output. This should only be
  +         * a text-string to write back. But if the ErrorDocument
  +         * was a local redirect and the requested resource failed
  +         * for any reason, the custom_response will still hold the
  +         * redirect URL. We don't really want to output this URL
  +         * as a text message, so first check the custom response
  +         * string to ensure that it is a text-string (using the
  +         * same test used in die(), i.e. does it start with a ").
  +         * If it doesn't, we've got a recursive error, so find
  +         * the original error and output that as well.
  +         */
  +        if (custom_response[0] == '\"') {
  +            bputs(custom_response + 1, fd);
  +            kill_timeout(r);
  +            finalize_request_protocol(r);
  +            return;
  +        }
  +        /*
  +         * Redirect failed, so get back the original error
  +         */
  +        while (r->prev && (r->prev->status != HTTP_OK))
  +            r = r->prev;
       }
       {
  -	char *title = status_lines[idx];
  -	/* folks decided they didn't want the error code in the H1 text */
  +        char *title = status_lines[idx];
  +        /* folks decided they didn't want the error code in the H1 text */
  +
  +        char *h1 = 4 + status_lines[idx];
  +
  +        bvputs(fd, "<HTML><HEAD>\n<TITLE>", title,
  +                   "</TITLE>\n</HEAD><BODY>\n<H1>", h1, "</H1>\n",
  +               NULL);
   
  -	char *h1 = 4 + status_lines[idx];
  -	
  -        bvputs
  -	    (
  -		fd,
  -		"<HTML><HEAD>\n<TITLE>",
  -		title,
  -		"</TITLE>\n</HEAD><BODY>\n<H1>",
  -		h1,
  -	       "</H1>\n",
  -	       NULL
  -	    );
  -	
           switch (status) {
  -	case REDIRECT:
  -	case MOVED:
  -	    bvputs(fd, "The document has moved <A HREF=\"",
  -		    escape_html(r->pool, location), "\">here</A>.<P>\n", NULL);
  -	    break;
  -	case HTTP_SEE_OTHER:
  -	    bvputs(fd, "The answer to your request is located <A HREF=\"",
  -		    escape_html(r->pool, location), "\">here</A>.<P>\n", NULL);
  -	    break;
  -	case HTTP_USE_PROXY:
  -	    bvputs(fd, "This resource is only accessible through the proxy\n",
  -		   escape_html(r->pool, location), "<BR>\nYou will need to ",
  +        case REDIRECT:
  +        case MOVED:
  +            bvputs(fd, "The document has moved <A HREF=\"",
  +                 escape_html(r->pool, location), "\">here</A>.<P>\n", NULL);
  +            break;
  +        case HTTP_SEE_OTHER:
  +            bvputs(fd, "The answer to your request is located <A HREF=\"",
  +                 escape_html(r->pool, location), "\">here</A>.<P>\n", NULL);
  +            break;
  +        case HTTP_USE_PROXY:
  +            bvputs(fd, "This resource is only accessible through the proxy\n",
  +                   escape_html(r->pool, location), "<BR>\nYou will need to ",
                      "configure your client to use that proxy.<P>\n", NULL);
  -	    break;
  -	case HTTP_PROXY_AUTHENTICATION_REQUIRED:
  -	case AUTH_REQUIRED:
  -	    bputs("This server could not verify that you\n", fd);
  -	    bputs("are authorized to access the document you\n", fd);
  -	    bputs("requested.  Either you supplied the wrong\n", fd);
  -	    bputs("credentials (e.g., bad password), or your\n", fd);
  -	    bputs("browser doesn't understand how to supply\n", fd);
  -	    bputs("the credentials required.<P>\n", fd);
  -	    break;
  -	case BAD_REQUEST:
  -	    bputs("Your browser sent a request that\n", fd);
  -	    bputs("this server could not understand.<P>\n", fd);
  -	    break;
  -	case HTTP_FORBIDDEN:
  -	    bvputs(fd, "You don't have permission to access ",
  -		     escape_html(r->pool, r->uri), "\non this server.<P>\n",
  -		   NULL);
  -	    break;
  -	case NOT_FOUND:
  -	    bvputs(fd, "The requested URL ", escape_html(r->pool, r->uri),
  -		    " was not found on this server.<P>\n", NULL);
  -	    break;
  -	case METHOD_NOT_ALLOWED:
  -	    bvputs(fd, "The requested method ", r->method, " is not allowed "
  -		   "for the URL ", escape_html(r->pool, r->uri),
  -		   ".<P>\n", NULL);
  -	    break;
  -	case NOT_ACCEPTABLE:
  -	    bvputs(fd,
  -		  "An appropriate representation of the requested resource ",
  -		   escape_html(r->pool, r->uri),
  -		   " could not be found on this server.<P>\n", NULL);
  -	    /* fall through */
  -	case MULTIPLE_CHOICES: 
  -	    {
  -		char *list;
  -		if ((list = table_get (r->notes, "variant-list")))
  -		    bputs(list, fd);
  -	    }
  -	    break;
  -	case LENGTH_REQUIRED:
  -	    bvputs(fd, "A request of the requested method ", r->method,
  -		   " requires a valid Content-length.<P>\n", NULL);
  -	    break;
  -	case PRECONDITION_FAILED:
  -	    bvputs(fd, "The precondition on the request for the URL ",
  -		   escape_html(r->pool, r->uri), " evaluated to false.<P>\n",
  -		   NULL);
  -	    break;
  -	case NOT_IMPLEMENTED:
  -	    bvputs(fd, escape_html(r->pool, r->method), " to ",
  -		   escape_html(r->pool, r->uri), " not supported.<P>\n", NULL);
  -	    break;
  -	case BAD_GATEWAY:
  -	    bputs("The proxy server received an invalid\015\012", fd);
  -	    bputs("response from an upstream server.<P>\015\012", fd);
  -	    break;
  -	case VARIANT_ALSO_VARIES:
  -	    bvputs(fd, "A variant for the requested entity  ",
  -		   escape_html(r->pool, r->uri), " is itself a ",
  -		   "transparently negotiable resource.<P>\n", NULL);
  -  	    break;
  -	case HTTP_REQUEST_TIME_OUT:
  -	    bputs("I'm tired of waiting for your request.\n", fd);
  -  	    break;
  -	case HTTP_GONE:
  -	    bvputs(fd, "The requested resource<BR>",
  -		   escape_html(r->pool, r->uri),
  +            break;
  +        case HTTP_PROXY_AUTHENTICATION_REQUIRED:
  +        case AUTH_REQUIRED:
  +            bputs("This server could not verify that you\n", fd);
  +            bputs("are authorized to access the document you\n", fd);
  +            bputs("requested.  Either you supplied the wrong\n", fd);
  +            bputs("credentials (e.g., bad password), or your\n", fd);
  +            bputs("browser doesn't understand how to supply\n", fd);
  +            bputs("the credentials required.<P>\n", fd);
  +            break;
  +        case BAD_REQUEST:
  +            bputs("Your browser sent a request that\n", fd);
  +            bputs("this server could not understand.<P>\n", fd);
  +            break;
  +        case HTTP_FORBIDDEN:
  +            bvputs(fd, "You don't have permission to access ",
  +                   escape_html(r->pool, r->uri), "\non this server.<P>\n",
  +                   NULL);
  +            break;
  +        case NOT_FOUND:
  +            bvputs(fd, "The requested URL ", escape_html(r->pool, r->uri),
  +                   " was not found on this server.<P>\n", NULL);
  +            break;
  +        case METHOD_NOT_ALLOWED:
  +            bvputs(fd, "The requested method ", r->method, " is not allowed "
  +                   "for the URL ", escape_html(r->pool, r->uri),
  +                   ".<P>\n", NULL);
  +            break;
  +        case NOT_ACCEPTABLE:
  +            bvputs(fd,
  +                   "An appropriate representation of the requested resource ",
  +                   escape_html(r->pool, r->uri),
  +                   " could not be found on this server.<P>\n", NULL);
  +            /* fall through */
  +        case MULTIPLE_CHOICES:
  +            {
  +                char *list;
  +                if ((list = table_get(r->notes, "variant-list")))
  +                    bputs(list, fd);
  +            }
  +            break;
  +        case LENGTH_REQUIRED:
  +            bvputs(fd, "A request of the requested method ", r->method,
  +                   " requires a valid Content-length.<P>\n", NULL);
  +            break;
  +        case PRECONDITION_FAILED:
  +            bvputs(fd, "The precondition on the request for the URL ",
  +                   escape_html(r->pool, r->uri), " evaluated to false.<P>\n",
  +                   NULL);
  +            break;
  +        case NOT_IMPLEMENTED:
  +            bvputs(fd, escape_html(r->pool, r->method), " to ",
  +                   escape_html(r->pool, r->uri), " not supported.<P>\n", NULL);
  +            break;
  +        case BAD_GATEWAY:
  +            bputs("The proxy server received an invalid\015\012", fd);
  +            bputs("response from an upstream server.<P>\015\012", fd);
  +            break;
  +        case VARIANT_ALSO_VARIES:
  +            bvputs(fd, "A variant for the requested entity  ",
  +                   escape_html(r->pool, r->uri), " is itself a ",
  +                   "transparently negotiable resource.<P>\n", NULL);
  +            break;
  +        case HTTP_REQUEST_TIME_OUT:
  +            bputs("I'm tired of waiting for your request.\n", fd);
  +            break;
  +        case HTTP_GONE:
  +            bvputs(fd, "The requested resource<BR>",
  +                   escape_html(r->pool, r->uri),
                      "<BR>\nis no longer available on this server ",
  -		   "and there is no forwarding address.\n",
  -	           "Please remove all references to this resource.\n", NULL);
  -  	    break;
  -	case HTTP_REQUEST_ENTITY_TOO_LARGE:
  -	    bvputs(fd, "The requested resource<BR>",
  -	           escape_html(r->pool, r->uri), "<BR>\n",
  -	           "does not allow request data with ", r->method,
  -	           " requests, or the amount of data provided in\n",
  -	           "the request exceeds the capacity limit.\n", NULL);
  -	    break;
  -	case HTTP_REQUEST_URI_TOO_LARGE:
  -	    bputs("The requested URL's length exceeds the capacity\n", fd);
  -	    bputs("limit for this server.\n", fd);
  -  	    break;
  -	case HTTP_UNSUPPORTED_MEDIA_TYPE:
  -	    bputs("The supplied request data is not in a format\n", fd);
  -	    bputs("acceptable for processing by this resource.\n", fd);
  -  	    break;
  -	case HTTP_SERVICE_UNAVAILABLE:
  -	    bputs("The server is temporarily unable to service your\n", fd);
  -	    bputs("request due to maintenance downtime or capacity\n", fd);
  -	    bputs("problems. Please try again later.\n", fd);
  -  	    break;
  -	case HTTP_GATEWAY_TIME_OUT:
  -	    bputs("The proxy server did not receive a timely response\n", fd);
  -	    bputs("from the upstream server.<P>\n", fd);
  -	    break;
  -	default:  /* HTTP_INTERNAL_SERVER_ERROR */
  -	    bputs("The server encountered an internal error or\n", fd);
  -	    bputs("misconfiguration and was unable to complete\n", fd);
  -	    bputs("your request.<P>\n", fd);
  -	    bputs("Please contact the server administrator,\n ", fd);
  -	    bputs(escape_html(r->pool, r->server->server_admin), fd);
  -	    bputs(" and inform them of the time the error occurred,\n", fd);
  -	    bputs("and anything you might have done that may have\n", fd);
  -	    bputs("caused the error.<P>\n", fd);
  -	    break;
  -	}
  -
  -	if (recursive_error) {
  -	    bvputs(fd, "<P>Additionally, a ",
  -	           status_lines[index_of_response(recursive_error)],
  -	           "\nerror was encountered while trying to use an "
  -	           "ErrorDocument to handle the request.\n", NULL);
  -	}
  -	bputs("</BODY></HTML>\n", fd);
  +                   "and there is no forwarding address.\n",
  +                   "Please remove all references to this resource.\n", NULL);
  +            break;
  +        case HTTP_REQUEST_ENTITY_TOO_LARGE:
  +            bvputs(fd, "The requested resource<BR>",
  +                   escape_html(r->pool, r->uri), "<BR>\n",
  +                   "does not allow request data with ", r->method,
  +                   " requests, or the amount of data provided in\n",
  +                   "the request exceeds the capacity limit.\n", NULL);
  +            break;
  +        case HTTP_REQUEST_URI_TOO_LARGE:
  +            bputs("The requested URL's length exceeds the capacity\n", fd);
  +            bputs("limit for this server.\n", fd);
  +            break;
  +        case HTTP_UNSUPPORTED_MEDIA_TYPE:
  +            bputs("The supplied request data is not in a format\n", fd);
  +            bputs("acceptable for processing by this resource.\n", fd);
  +            break;
  +        case HTTP_SERVICE_UNAVAILABLE:
  +            bputs("The server is temporarily unable to service your\n", fd);
  +            bputs("request due to maintenance downtime or capacity\n", fd);
  +            bputs("problems. Please try again later.\n", fd);
  +            break;
  +        case HTTP_GATEWAY_TIME_OUT:
  +            bputs("The proxy server did not receive a timely response\n", fd);
  +            bputs("from the upstream server.<P>\n", fd);
  +            break;
  +        default:                /* HTTP_INTERNAL_SERVER_ERROR */
  +            bputs("The server encountered an internal error or\n", fd);
  +            bputs("misconfiguration and was unable to complete\n", fd);
  +            bputs("your request.<P>\n", fd);
  +            bputs("Please contact the server administrator,\n ", fd);
  +            bputs(escape_html(r->pool, r->server->server_admin), fd);
  +            bputs(" and inform them of the time the error occurred,\n", fd);
  +            bputs("and anything you might have done that may have\n", fd);
  +            bputs("caused the error.<P>\n", fd);
  +            break;
  +        }
  +
  +        if (recursive_error) {
  +            bvputs(fd, "<P>Additionally, a ",
  +                   status_lines[index_of_response(recursive_error)],
  +                   "\nerror was encountered while trying to use an "
  +                   "ErrorDocument to handle the request.\n", NULL);
  +        }
  +        bputs("</BODY></HTML>\n", fd);
       }
       kill_timeout(r);
       finalize_request_protocol(r);
  @@ -2235,7 +2273,7 @@
    * comes along?
    */
   
  -API_EXPORT(void) client_to_stdout (conn_rec *c)
  +API_EXPORT(void) client_to_stdout(conn_rec *c)
   {
       bflush(c->client);
       dup2(c->client->fd, STDOUT_FILENO);
  
  
  
  1.29      +34 -34    apachen/src/main/http_protocol.h
  
  Index: http_protocol.h
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/main/http_protocol.h,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- http_protocol.h	1997/09/12 21:49:17	1.28
  +++ http_protocol.h	1997/09/14 10:04:59	1.29
  @@ -6,7 +6,7 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *    notice, this list of conditions and the following disclaimer.
    *
    * 2. Redistributions in binary form must reproduce the above copyright
    *    notice, this list of conditions and the following disclaimer in
  @@ -57,26 +57,26 @@
   
   /* Read a request and fill in the fields. */
   
  -request_rec *read_request (conn_rec *c);
  +request_rec *read_request(conn_rec *c);
   
   /* Send a single HTTP header field */
   
  -int send_header_field (request_rec *r, const char *fieldname,
  -                                       const char *fieldval);
  +int send_header_field(request_rec *r, const char *fieldname,
  +                      const char *fieldval);
   
   /* Send the Status-Line and header fields for HTTP response */
   
  -API_EXPORT(void) send_http_header (request_rec *l);     
  +API_EXPORT(void) send_http_header(request_rec *l);
   
   /* Send the response to special method requests */
   
  -int send_http_trace (request_rec *r);
  -int send_http_options (request_rec *r);
  +int send_http_trace(request_rec *r);
  +int send_http_options(request_rec *r);
   
   /* Finish up stuff after a request */
   
  -void finalize_request_protocol (request_rec *r);
  -     
  +void finalize_request_protocol(request_rec *r);
  +
   /* Send error back to client... last arg indicates error status in case
    * we get an error in the process of trying to deal with an ErrorDocument
    * to handle some other error.  In that case, we print the default report
  @@ -84,8 +84,8 @@
    * problem with the ErrorDocument.
    */
   
  -void send_error_response (request_rec *r, int recursive_error);
  -     
  +void send_error_response(request_rec *r, int recursive_error);
  +
   /* Set last modified header line from the lastmod date of the associated file.
    * Also, set content length.
    *
  @@ -93,8 +93,8 @@
    * permit_cache argument is set to one).
    */
   
  -API_EXPORT(int) set_content_length (request_rec *r, long length);
  -int set_keepalive (request_rec *r);
  +API_EXPORT(int) set_content_length(request_rec *r, long length);
  +int set_keepalive(request_rec *r);
   API_EXPORT(time_t) rationalize_mtime(request_rec *r, time_t mtime);
   API_EXPORT(void) set_etag(request_rec *r);
   API_EXPORT(void) set_last_modified(request_rec *r);
  @@ -118,38 +118,38 @@
   API_EXPORT(long) send_fb_length(BUFF *f, request_rec *r, long length);
   
   API_EXPORT(size_t) send_mmap(void *mm, request_rec *r, size_t offset,
  -    size_t length);
  -     
  +                             size_t length);
  +
   /* Hmmm... could macrofy these for now, and maybe forever, though the
    * definitions of the macros would get a whole lot hairier.
    */
  -     
  -API_EXPORT(int) rputc (int c, request_rec *r);     
  +
  +API_EXPORT(int) rputc(int c, request_rec *r);
   API_EXPORT(int) rputs(const char *str, request_rec *r);
   API_EXPORT(int) rwrite(const void *buf, int nbyte, request_rec *r);
  -API_EXPORT_NONSTD(int) rvputs(request_rec *r, ...);
  -API_EXPORT_NONSTD(int) rprintf(request_rec *r,const char *fmt,...);
  +API_EXPORT_NONSTD(int) rvputs(request_rec *r,...);
  +API_EXPORT_NONSTD(int) rprintf(request_rec *r, const char *fmt,...);
   API_EXPORT(int) rflush(request_rec *r);
  -     
  +
   /*
    * Index used in custom_responses array for a specific error code
    * (only use outside protocol.c is in getting them configured).
    */
   
  -int index_of_response (int status);
  +int index_of_response(int status);
   
   /* Reading a block of data from the client connection (e.g., POST arg) */
  -     
  -API_EXPORT(int) setup_client_block (request_rec *r, int read_policy);
  -API_EXPORT(int) should_client_block (request_rec *r);
  -API_EXPORT(long) get_client_block (request_rec *r, char *buffer, int bufsiz);
  -API_EXPORT(int) discard_request_body (request_rec *r);
  +
  +API_EXPORT(int) setup_client_block(request_rec *r, int read_policy);
  +API_EXPORT(int) should_client_block(request_rec *r);
  +API_EXPORT(long) get_client_block(request_rec *r, char *buffer, int bufsiz);
  +API_EXPORT(int) discard_request_body(request_rec *r);
   
   /* Sending a byterange */
   
  -API_EXPORT(int) set_byterange (request_rec *r);
  -API_EXPORT(int) each_byterange (request_rec *r, long *offset, long *length);
  -     
  +API_EXPORT(int) set_byterange(request_rec *r);
  +API_EXPORT(int) each_byterange(request_rec *r, long *offset, long *length);
  +
   /* Finally, this charming little number is here to encapsulate the
    * degree to which nph- scripts completely escape from any discipline
    * the protocol code might care to impose (this as opposed to other
  @@ -157,7 +157,7 @@
    * to explicitly set the status line).
    */
   
  -API_EXPORT(void) client_to_stdout (conn_rec *c); 
  +API_EXPORT(void) client_to_stdout(conn_rec *c);
   
   
   /* Support for the Basic authentication protocol.  Note that there's
  @@ -185,16 +185,16 @@
   API_EXPORT(void) note_auth_failure(request_rec *r);
   API_EXPORT(void) note_basic_auth_failure(request_rec *r);
   API_EXPORT(void) note_digest_auth_failure(request_rec *r);
  -API_EXPORT(int) get_basic_auth_pw (request_rec *r, char **pw);
  +API_EXPORT(int) get_basic_auth_pw(request_rec *r, char **pw);
   
   /*
    * Setting up the protocol fields for subsidiary requests...
    * Also, a wrapup function to keep the internal accounting straight.
    */
   
  -void set_sub_req_protocol (request_rec *rnew, const request_rec *r);
  -void finalize_sub_req_protocol (request_rec *sub_r);
  +void set_sub_req_protocol(request_rec *rnew, const request_rec *r);
  +void finalize_sub_req_protocol(request_rec *sub_r);
   
   /* This is also useful for putting sub_reqs and internal_redirects together */
   
  -void parse_uri (request_rec *r, const char *uri);     
  +void parse_uri(request_rec *r, const char *uri);