You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Dean Gaudet <dg...@hyperreal.org> on 1997/07/20 20:52:45 UTC

cvs commit: apache/src CHANGES http_protocol.c http_request.c mod_browser.c

dgaudet     97/07/20 11:52:44

  Modified:    src       CHANGES http_protocol.c http_request.c
                        mod_browser.c
  Log:
  "force-response-1.0" now only applies to requests which are HTTP/1.0 to
  begin with.  "nokeepalive" now works for HTTP/1.1 clients.  Added
  "downgrade-1.0" which causes Apache to pretend it received a 1.0.
  
  mod_browser now triggers during translate_name to workaround a deficiency
  in the header_parse phase.
  
  PR:		875
  Reviewed by:	Roy Fielding
  
  Revision  Changes    Path
  1.355     +5 -0      apache/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache/src/CHANGES,v
  retrieving revision 1.354
  retrieving revision 1.355
  diff -C3 -r1.354 -r1.355
  *** CHANGES	1997/07/20 13:17:58	1.354
  --- CHANGES	1997/07/20 18:52:39	1.355
  ***************
  *** 1,5 ****
  --- 1,10 ----
    Changes with Apache 1.3
    
  +   *) "force-response-1.0" now only applies to requests which are HTTP/1.0 to
  +      begin with.  "nokeepalive" now works for HTTP/1.1 clients.  Added
  +      "downgrade-1.0" which causes Apache to pretend it received a 1.0.
  +      [Dean Gaudet] related PR#875
  + 
      *) API: Correct child_init() slot declaration from int to void, to
         match the init() declaration.  Update mod_example to use the new
         hook.  [Ken Coar]
  
  
  
  1.144     +9 -6      apache/src/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_protocol.c,v
  retrieving revision 1.143
  retrieving revision 1.144
  diff -C3 -r1.143 -r1.144
  *** http_protocol.c	1997/07/19 20:27:52	1.143
  --- http_protocol.c	1997/07/20 18:52:40	1.144
  ***************
  *** 281,288 ****
         *   and the response status does not require a close;
         *   and the response generator has not already indicated close;
         *   and the client did not request non-persistence (Connection: close);
         *   and    the client is requesting an HTTP/1.0-style keep-alive
  -      *          and we haven't been configured to ignore the buggy twit,
         *       or the client claims to be HTTP/1.1 compliant (perhaps a proxy);
         *   THEN we can be persistent, which requires more headers be output.
         *
  --- 281,289 ----
         *   and the response status does not require a close;
         *   and the response generator has not already indicated close;
         *   and the client did not request non-persistence (Connection: close);
  +      *   and    we haven't been configured to ignore the buggy twit
  +      *       or they're a buggy twit coming through a HTTP/1.1 proxy
         *   and    the client is requesting an HTTP/1.0-style keep-alive
         *       or the client claims to be HTTP/1.1 compliant (perhaps a proxy);
         *   THEN we can be persistent, which requires more headers be output.
         *
  ***************
  *** 304,312 ****
            !status_drops_connection(r->status) &&
            !wimpy &&
            !find_token(r->pool, conn, "close") &&
  !         (((ka_sent = find_token(r->pool, conn, "keep-alive")) &&
  !           !table_get(r->subprocess_env, "nokeepalive")) ||
  !          (r->proto_num >= 1001))
           ) {
    	char header[256];
    	int left = r->server->keep_alive_max - r->connection->keepalives;
  --- 305,314 ----
            !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))
           ) {
    	char header[256];
    	int left = r->server->keep_alive_max - r->connection->keepalives;
  ***************
  *** 1048,1055 ****
        
        if (!r->status_line)
            r->status_line = status_lines[index_of_response(r->status)];
  !     
  !     if (table_get(r->subprocess_env,"force-response-1.0"))
    	protocol = "HTTP/1.0";
        else
    	protocol = SERVER_PROTOCOL;
  --- 1050,1058 ----
        
        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"))
    	protocol = "HTTP/1.0";
        else
    	protocol = SERVER_PROTOCOL;
  
  
  
  1.66      +4 -0      apache/src/http_request.c
  
  Index: http_request.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_request.c,v
  retrieving revision 1.65
  retrieving revision 1.66
  diff -C3 -r1.65 -r1.66
  *** http_request.c	1997/07/19 20:27:53	1.65
  --- http_request.c	1997/07/20 18:52:41	1.66
  ***************
  *** 957,962 ****
  --- 957,966 ----
    	return;
        }
    
  +     if (r->proto_num > 1000 && table_get (r->subprocess_env, "downgrade-1.0")) {
  + 	r->proto_num = 1000;
  +     }
  + 
        /* NB: directory_walk() clears the per_dir_config, so we don't inherit from
           location_walk() above */
    
  
  
  
  1.12      +4 -4      apache/src/mod_browser.c
  
  Index: mod_browser.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/mod_browser.c,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -C3 -r1.11 -r1.12
  *** mod_browser.c	1997/07/17 22:27:34	1.11
  --- mod_browser.c	1997/07/20 18:52:41	1.12
  ***************
  *** 139,145 ****
    { NULL },
    };
    
  ! int parse_headers_browser_module(request_rec *r)
    {
        server_rec *s = r->server;
        browser_server_config_rec *sconf = get_module_config (s->module_config,
  --- 139,145 ----
    { NULL },
    };
    
  ! static int browser_match(request_rec *r)
    {
        server_rec *s = r->server;
        browser_server_config_rec *sconf = get_module_config (s->module_config,
  ***************
  *** 166,172 ****
    	}
        }
    
  !     return OK;  
    }
    
    module MODULE_VAR_EXPORT browser_module = {
  --- 166,172 ----
    	}
        }
    
  !     return DECLINED;  
    }
    
    module MODULE_VAR_EXPORT browser_module = {
  ***************
  *** 178,190 ****
       merge_browser_config,     	/* merge server configs */
       browser_module_cmds,		/* command table */
       NULL,			/* handlers */
  !    NULL,			/* filename translation */
       NULL,			/* check_user_id */
       NULL,			/* check auth */
       NULL,			/* check access */
       NULL,			/* type_checker */
       NULL,			/* fixups */
       NULL,			/* logger */
  !    parse_headers_browser_module,/* header parser */
       NULL				/* child_init */
    };
  --- 178,190 ----
       merge_browser_config,     	/* merge server configs */
       browser_module_cmds,		/* command table */
       NULL,			/* handlers */
  !    browser_match,		/* filename translation */
       NULL,			/* check_user_id */
       NULL,			/* check auth */
       NULL,			/* check access */
       NULL,			/* type_checker */
       NULL,			/* fixups */
       NULL,			/* logger */
  !    NULL				/* header parser */
       NULL				/* child_init */
    };