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.com> on 1996/10/17 01:24:38 UTC

cvs commit: apache/src httpd.h http_protocol.c http_request.c mod_asis.c

fielding    96/10/16 16:24:37

  Modified:    src       httpd.h http_protocol.c http_request.c mod_asis.c
  Log:
  Reduced dependency on magic number status codes in server core
  and removed artificial restrictions on range of codes used by server,
  particularly in mod_asis where flexibility is paramount.
  Many other modules continue to use magic numbers, but those can wait.
  
  Revision  Changes    Path
  1.55      +9 -1      apache/src/httpd.h
  
  Index: httpd.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/httpd.h,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -C3 -r1.54 -r1.55
  *** httpd.h	1996/10/13 13:35:29	1.54
  --- httpd.h	1996/10/16 23:24:32	1.55
  ***************
  *** 50,56 ****
     *
     */
    
  ! /* $Id: httpd.h,v 1.54 1996/10/13 13:35:29 ben Exp $ */
    
    /*
     * httpd.h: header for simple (ha! not anymore) http daemon
  --- 50,56 ----
     *
     */
    
  ! /* $Id: httpd.h,v 1.55 1996/10/16 23:24:32 fielding Exp $ */
    
    /*
     * httpd.h: header for simple (ha! not anymore) http daemon
  ***************
  *** 312,317 ****
  --- 312,325 ----
    #define NOT_IMPLEMENTED     HTTP_NOT_IMPLEMENTED
    #define BAD_GATEWAY         HTTP_BAD_GATEWAY
    #define VARIANT_ALSO_VARIES HTTP_VARIANT_ALSO_VARIES
  + 
  + #define is_HTTP_INFO(x)         ((x >= 100)&&(x < 200))
  + #define is_HTTP_SUCCESS(x)      ((x >= 200)&&(x < 300))
  + #define is_HTTP_REDIRECT(x)     ((x >= 300)&&(x < 400))
  + #define is_HTTP_ERROR(x)        ((x >= 400)&&(x < 600))
  + #define is_HTTP_CLIENT_ERROR(x) ((x >= 400)&&(x < 500))
  + #define is_HTTP_SERVER_ERROR(x) ((x >= 500)&&(x < 600))
  + 
    
    #define METHODS 8
    #define M_GET 0
  
  
  
  1.57      +24 -18    apache/src/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_protocol.c,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -C3 -r1.56 -r1.57
  *** http_protocol.c	1996/10/16 20:56:19	1.56
  --- http_protocol.c	1996/10/16 23:24:33	1.57
  ***************
  *** 50,56 ****
     *
     */
      
  ! /* $Id: http_protocol.c,v 1.56 1996/10/16 20:56:19 fielding Exp $ */
    
    /*
     * http_protocol.c --- routines which directly communicate with the
  --- 50,56 ----
     *
     */
      
  ! /* $Id: http_protocol.c,v 1.57 1996/10/16 23:24:33 fielding Exp $ */
    
    /*
     * http_protocol.c --- routines which directly communicate with the
  ***************
  *** 363,369 ****
         * to succeed if the GET was successful; ErrorDocuments *always* get sent.
         */
        
  !     if ((r->status < 200) || (r->status >= 300))
            return OK;
    
        if (if_modified_since && !r->header_only &&
  --- 363,369 ----
         * to succeed if the GET was successful; ErrorDocuments *always* get sent.
         */
        
  !     if (!is_HTTP_SUCCESS(r->status))
            return OK;
    
        if (if_modified_since && !r->header_only &&
  ***************
  *** 650,656 ****
    
        r->sent_bodyct = 0; /* bytect isn't for body */
        
  !     r->status = 200;		/* Until further notice.
    				 * Only changed by die(), or (bletch!)
    				 * scan_script_header...
    				 */
  --- 650,656 ----
    
        r->sent_bodyct = 0; /* bytect isn't for body */
        
  !     r->status = HTTP_OK;	/* Until further notice.
    				 * Only changed by die(), or (bletch!)
    				 * scan_script_header...
    				 */
  ***************
  *** 711,717 ****
        rnew->method = "GET"; rnew->method_number = M_GET;
        rnew->protocol = "INCLUDED";
    
  !     rnew->status = 200;
    
        rnew->headers_in = r->headers_in;
        rnew->subprocess_env = copy_table (rnew->pool, r->subprocess_env);
  --- 711,717 ----
        rnew->method = "GET"; rnew->method_number = M_GET;
        rnew->protocol = "INCLUDED";
    
  !     rnew->status = HTTP_OK;
    
        rnew->headers_in = r->headers_in;
        rnew->subprocess_env = copy_table (rnew->pool, r->subprocess_env);
  ***************
  *** 1117,1136 ****
        return OK;
    }
    
  ! int should_client_block (request_rec *r) {
  !    if (r->method_number != M_POST && r->method_number != M_PUT)
  !        return 0;
    
  !    if (r->proto_num >= 1001) {
  !        bvputs(r->connection->client,
  !             SERVER_PROTOCOL, " 100 Continue\015\012\015\012", NULL);
  !        bflush(r->connection->client);
  !    }
    
  !    return 1;
    }
    
  ! static int rd_chunk_size (BUFF *b) {
        int chunksize = 0;
        int c;
    
  --- 1117,1142 ----
        return OK;
    }
    
  ! int should_client_block (request_rec *r)
  ! {
  !     /* The following should involve a test of whether the request message
  !      * included a Content-Length or Transfer-Encoding header field, since
  !      * methods are supposed to be extensible.  However, this'll do for now.
  !      */
  !     if (r->method_number != M_POST && r->method_number != M_PUT)
  !         return 0;
    
  !     if (r->proto_num >= 1001) {    /* sending 100 Continue interim response */
  !         bvputs(r->connection->client,
  !             SERVER_PROTOCOL, " ", status_lines[0], "\015\012\015\012", NULL);
  !         bflush(r->connection->client);
  !     }
    
  !     return 1;
    }
    
  ! static int rd_chunk_size (BUFF *b)
  ! {
        int chunksize = 0;
        int c;
    
  ***************
  *** 1302,1309 ****
    
        /* If status code not found, use code 500.  */
        if (idx == -1) {
  !         status = SERVER_ERROR;
  !         idx = index_of_response (SERVER_ERROR);
        }
    
        if (!r->assbackwards) {
  --- 1308,1315 ----
    
        /* If status code not found, use code 500.  */
        if (idx == -1) {
  !         status = HTTP_INTERNAL_SERVER_ERROR;
  !         idx = index_of_response(HTTP_INTERNAL_SERVER_ERROR);
        }
    
        if (!r->assbackwards) {
  ***************
  *** 1336,1342 ****
    	 */
    	bputs("Connection: close\015\012", c->client);
    	
  ! 	if (location && (status >= 300) && (status < 400))
    	    bvputs(c->client, "Location: ", location, "\015\012", NULL);
    
    	if ((status == METHOD_NOT_ALLOWED) || (status == NOT_IMPLEMENTED))
  --- 1342,1348 ----
    	 */
    	bputs("Connection: close\015\012", c->client);
    	
  ! 	if (location && is_HTTP_REDIRECT(status))
    	    bvputs(c->client, "Location: ", location, "\015\012", NULL);
    
    	if ((status == METHOD_NOT_ALLOWED) || (status == NOT_IMPLEMENTED))
  ***************
  *** 1372,1378 ****
    	}
    	/* Redirect failed, so get back the original error
    	 */
  ! 	while (r->prev && r->prev->status != 200)
              r = r->prev;
        }
        {
  --- 1378,1384 ----
    	}
    	/* Redirect failed, so get back the original error
    	 */
  ! 	while (r->prev && (r->prev->status != HTTP_OK))
              r = r->prev;
        }
        {
  
  
  
  1.18      +5 -5      apache/src/http_request.c
  
  Index: http_request.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_request.c,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -C3 -r1.17 -r1.18
  *** http_request.c	1996/10/16 17:29:22	1.17
  --- http_request.c	1996/10/16 23:24:34	1.18
  ***************
  *** 50,56 ****
     *
     */
    
  ! /* $Id: http_request.c,v 1.17 1996/10/16 17:29:22 ben Exp $ */
    
    /*
     * http_request.c: functions to get and process requests
  --- 50,56 ----
     *
     */
    
  ! /* $Id: http_request.c,v 1.18 1996/10/16 23:24:34 fielding Exp $ */
    
    /*
     * http_request.c: functions to get and process requests
  ***************
  *** 540,549 ****
        if (rnew->finfo.st_mode == 0 && stat (rnew->filename, &rnew->finfo) < 0)
            rnew->finfo.st_mode = 0;
    
  !     if ((rnew->status == 200) && (res = find_types (rnew)))
            rnew->status = res;
        
  !     if ((rnew->status == 200) && (res = run_fixups (rnew)))
            rnew->status = res;
        
        return rnew;
  --- 540,549 ----
        if (rnew->finfo.st_mode == 0 && stat (rnew->filename, &rnew->finfo) < 0)
            rnew->finfo.st_mode = 0;
    
  !     if ((rnew->status == HTTP_OK) && (res = find_types (rnew)))
            rnew->status = res;
        
  !     if ((rnew->status == HTTP_OK) && (res = run_fixups (rnew)))
            rnew->status = res;
        
        return rnew;
  ***************
  *** 687,696 ****
         * any attempt to handle the other thing "intelligently"...
         */
    
  !     if (r->status != 200) {
            recursive_error = type;
    
  ! 	while (r->prev && r->prev->status != 200)
    	  r = r->prev; /* Get back to original error */
    	
    	type = r->status;
  --- 687,696 ----
         * any attempt to handle the other thing "intelligently"...
         */
    
  !     if (r->status != HTTP_OK) {
            recursive_error = type;
    
  ! 	while (r->prev && (r->prev->status != HTTP_OK))
    	  r = r->prev; /* Get back to original error */
    	
    	type = r->status;
  
  
  
  1.7       +4 -3      apache/src/mod_asis.c
  
  Index: mod_asis.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/mod_asis.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -C3 -r1.6 -r1.7
  *** mod_asis.c	1996/08/20 11:50:56	1.6
  --- mod_asis.c	1996/10/16 23:24:34	1.7
  ***************
  *** 50,56 ****
     *
     */
    
  ! /* $Id: mod_asis.c,v 1.6 1996/08/20 11:50:56 paul Exp $ */
    
    #include "httpd.h"
    #include "http_config.h"
  --- 50,56 ----
     *
     */
    
  ! /* $Id: mod_asis.c,v 1.7 1996/10/16 23:24:34 fielding Exp $ */
    
    #include "httpd.h"
    #include "http_config.h"
  ***************
  *** 82,90 ****
        location = table_get (r->headers_out, "Location");
    
        if (location && location[0] == '/' && 
  !         (r->status == 200 || r->status == 301 || r->status == 302)) {
    
  !         r->status = 200; /* Assume 200 status on whatever we're pointing to */
    
    	/* This redirect needs to be a GET no matter what the original
    	 * method was.
  --- 82,91 ----
        location = table_get (r->headers_out, "Location");
    
        if (location && location[0] == '/' && 
  !         ((r->status == HTTP_OK) || is_HTTP_REDIRECT(r->status))) {
    
  !         /* Internal redirect -- fake-up a pseudo-request */
  !         r->status = HTTP_OK;
    
    	/* This redirect needs to be a GET no matter what the original
    	 * method was.