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.