httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Roy Fielding <field...@hyperreal.org>
Subject cvs commit: apache/src/modules/proxy mod_proxy.h proxy_cache.c proxy_ftp.c proxy_http.c
Date Fri, 15 Aug 1997 17:08:58 GMT
fielding    97/08/15 10:08:58

  Modified:    src      Tag: APACHE_1_2_X CHANGES http_protocol.c
               src/modules/proxy Tag: APACHE_1_2_X mod_proxy.h
                        proxy_cache.c proxy_ftp.c proxy_http.c
  Log:
  Force proxy to always respond as HTTP/1.0, which it was failing to
  do for errors and cached responses.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.286.2.46 +3 -0      apache/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache/src/CHANGES,v
  retrieving revision 1.286.2.45
  retrieving revision 1.286.2.46
  diff -u -r1.286.2.45 -r1.286.2.46
  --- CHANGES	1997/08/12 11:58:58	1.286.2.45
  +++ CHANGES	1997/08/15 17:08:50	1.286.2.46
  @@ -1,6 +1,9 @@
   
   Changes with Apache 1.2.3
   
  +  *) Force proxy to always respond as HTTP/1.0, which it was failing to
  +     do for errors and cached responses.  [Roy Fielding]
  +
   Changes with Apache 1.2.2 [not released]
   
     *) Fixed another long-standing bug in sub_req_lookup_file where it would
  
  
  
  1.126.2.6 +9 -2      apache/src/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_protocol.c,v
  retrieving revision 1.126.2.5
  retrieving revision 1.126.2.6
  diff -u -r1.126.2.5 -r1.126.2.6
  --- http_protocol.c	1997/07/31 08:19:48	1.126.2.5
  +++ http_protocol.c	1997/08/15 17:08:51	1.126.2.6
  @@ -1044,9 +1044,16 @@
       if (!r->status_line)
           r->status_line = status_lines[index_of_response(r->status)];
   
  -    if (r->proto_num == 1000
  -	&& table_get(r->subprocess_env,"force-response-1.0"))
  +    /* mod_proxy is only HTTP/1.0, so avoid sending HTTP/1.1 error response;
  +     * 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"))) {
  +
   	protocol = "HTTP/1.0";
  +	r->connection->keepalive = -1;
  +    }
       else
   	protocol = SERVER_PROTOCOL;
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.11.2.1  +1 -1      apache/src/modules/proxy/mod_proxy.h
  
  Index: mod_proxy.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/mod_proxy.h,v
  retrieving revision 1.11
  retrieving revision 1.11.2.1
  diff -u -r1.11 -r1.11.2.1
  --- mod_proxy.h	1997/04/16 00:13:05	1.11
  +++ mod_proxy.h	1997/08/15 17:08:54	1.11.2.1
  @@ -225,7 +225,7 @@
   int proxy_cache_check(request_rec *r, char *url, struct cache_conf *conf,
       struct cache_req **cr);
   int proxy_cache_update(struct cache_req *c, array_header *resp_hdrs,
  -    const char *protocol, int nocache);
  +    const int is_HTTP1, int nocache);
   void proxy_garbage_coll(request_rec *r);
   
   /* proxy_connect.c */
  
  
  
  1.13.2.1  +2 -3      apache/src/modules/proxy/proxy_cache.c
  
  Index: proxy_cache.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_cache.c,v
  retrieving revision 1.13
  retrieving revision 1.13.2.1
  diff -u -r1.13 -r1.13.2.1
  --- proxy_cache.c	1997/05/29 15:16:01	1.13
  +++ proxy_cache.c	1997/08/15 17:08:55	1.13.2.1
  @@ -581,7 +581,7 @@
    */
   int
   proxy_cache_update(struct cache_req *c, array_header *resp_hdrs,
  -	     const char *protocol, int nocache)
  +                   const int is_HTTP1, int nocache)
   {
       request_rec *r=c->req;
       char *p;
  @@ -632,8 +632,7 @@
       if ((r->status != 200 && r->status != 301 && r->status !=
304) ||
   	(expire != NULL && expc == BAD_DATE) ||
   	(r->status == 304 && c->fp == NULL) ||
  -	(r->status == 200 && lmods == NULL &&
  -	                     strncmp(protocol, "HTTP/1.", 7) == 0) ||
  +	(r->status == 200 && lmods == NULL && is_HTTP1) ||
   	r->header_only ||
   	table_get(r->headers_in, "Authorization") != NULL ||
   	nocache)
  
  
  
  1.21.2.1  +1 -1      apache/src/modules/proxy/proxy_ftp.c
  
  Index: proxy_ftp.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_ftp.c,v
  retrieving revision 1.21
  retrieving revision 1.21.2.1
  diff -u -r1.21 -r1.21.2.1
  --- proxy_ftp.c	1997/04/22 03:29:37	1.21
  +++ proxy_ftp.c	1997/08/15 17:08:55	1.21.2.1
  @@ -908,7 +908,7 @@
               nocache = 1;
       }
   
  -    i = proxy_cache_update(c, resp_hdrs, "FTP", nocache);
  +    i = proxy_cache_update(c, resp_hdrs, 0, nocache);
   
       if (i != DECLINED)
       {
  
  
  
  1.17.2.2  +12 -14    apache/src/modules/proxy/proxy_http.c
  
  Index: proxy_http.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_http.c,v
  retrieving revision 1.17.2.1
  retrieving revision 1.17.2.2
  diff -u -r1.17.2.1 -r1.17.2.2
  --- proxy_http.c	1997/07/20 18:36:03	1.17.2.1
  +++ proxy_http.c	1997/08/15 17:08:56	1.17.2.2
  @@ -143,7 +143,7 @@
   {
       char *p;
       const char *err, *desthost;
  -    int i, j, sock, len;
  +    int i, j, sock, len, backasswards;
       array_header *reqhdrs_arr, *resp_hdrs;
       table_entry *reqhdrs;
       struct sockaddr_in server;
  @@ -151,7 +151,7 @@
       struct hostent server_hp;
       BUFF *f, *cache;
       struct hdr_entry *hdr;
  -    char buffer[HUGE_STRING_LEN], inprotocol[9], outprotocol[9];
  +    char buffer[HUGE_STRING_LEN];
       pool *pool=r->pool;
       const long int zero=0L;
       int destport = 0;
  @@ -286,7 +286,7 @@
   	return proxyerror(r, "Error reading from remote server");
       }
   
  -/* Is it an HTTP/1 response? */
  +/* Is it an HTTP/1 response?  This is buggy if we ever see an HTTP/1.10 */
       if (checkmask(buffer,  "HTTP/#.# ###*"))
       {
   /* If not an HTTP/1 messsage or if the status line was > 8192 bytes */
  @@ -296,12 +296,9 @@
   	    kill_timeout(r);
   	    return BAD_GATEWAY;
   	}
  +	backasswards = 0;
   	buffer[--len] = '\0';
  -	memcpy(inprotocol, buffer, 8);
  -	inprotocol[8] = '\0';
   
  -/* we use the same protocol on output as on input */
  -	strcpy(outprotocol, inprotocol);
   	buffer[12] = '\0';
   	r->status = atoi(&buffer[9]);
   	buffer[12] = ' ';
  @@ -312,11 +309,13 @@
   /* Also, take care with headers with multiple occurences. */
   
   	resp_hdrs = proxy_read_headers(pool, buffer, HUGE_STRING_LEN, f);
  -    } else
  +
  +	clear_connection((table *)resp_hdrs);  /* Strip Connection hdrs */
  +    }
  +    else
       {
   /* an http/0.9 response */
  -	strcpy(inprotocol, "HTTP/0.9");
  -	strcpy(outprotocol, "HTTP/1.0");
  +	backasswards = 1;
   	r->status = 200;
   	r->status_line = "200 OK";
   
  @@ -350,7 +349,7 @@
   	    nocache = 1; 
       }
   
  -    i = proxy_cache_update(c, resp_hdrs, inprotocol, nocache);
  +    i = proxy_cache_update(c, resp_hdrs, !backasswards, nocache);
       if (i != DECLINED)
       {
   	pclosef(pool, sock);
  @@ -365,8 +364,7 @@
       if (!r->assbackwards)
           rvputs(r, "HTTP/1.0 ", r->status_line, "\015\012", NULL);
       if (cache != NULL)
  -	if (bvputs(cache, outprotocol, " ", r->status_line, "\015\012", NULL)
  -	    == -1)
  +	if (bvputs(cache, "HTTP/1.0 ", r->status_line, "\015\012", NULL) == -1)
   	    cache = proxy_cache_error(c);
   
   /* send headers */
  @@ -389,7 +387,7 @@
       bsetopt(r->connection->client, BO_BYTECT, &zero);
       r->sent_bodyct = 1;
   /* Is it an HTTP/0.9 respose? If so, send the extra data */
  -    if (strcmp(inprotocol, "HTTP/0.9") == 0)
  +    if (backasswards)
       {
   	bwrite(r->connection->client, buffer, len);
   	if (cache != NULL)
  
  
  

Mime
View raw message