diff -urN apache_1.3.26/src/include/httpd.h.orig apache_1.3.26/src/include/httpd.h --- apache_1.3.26/src/include/httpd.h.orig Fri Feb 15 00:24:23 2002 +++ apache_1.3.26/src/include/httpd.h Fri Feb 15 00:30:42 2002 @@ -281,11 +281,16 @@ #define MAX_STRING_LEN HUGE_STRING_LEN #define HUGE_STRING_LEN 8192 -/* The timeout for waiting for messages */ +/* The timeout for waiting for messages sent */ #ifndef DEFAULT_TIMEOUT #define DEFAULT_TIMEOUT 300 #endif +/* The timeout for waiting for messages received */ +#ifndef DEFAULT_RECV_TIMEOUT +#define DEFAULT_RECV_TIMEOUT 5 +#endif + /* The timeout for waiting for keepalive timeout until next request */ #ifndef DEFAULT_KEEPALIVE_TIMEOUT #define DEFAULT_KEEPALIVE_TIMEOUT 15 @@ -997,7 +1002,7 @@ /* Transaction handling */ server_addr_rec *addrs; - int timeout; /* Timeout, in seconds, before we give up */ + int timeout; /* Timeout, in seconds, before we give up (general)*/ int keep_alive_timeout; /* Seconds we'll wait for another request */ int keep_alive_max; /* Maximum requests per connection */ int keep_alive; /* Use persistent connections? */ @@ -1015,6 +1020,7 @@ int limit_req_line; /* limit on size of the HTTP request line */ int limit_req_fieldsize; /* limit on size of any request header field */ int limit_req_fields; /* limit on number of request header fields */ + int recv_timeout; /* Timeout, in seconds, before we give up on receives */ #ifdef EAPI ap_ctx *ctx; diff -ur apache_1.3.26/src/main/http_config.c apache_1.3.26_recvtimeout/src/main/http_config.c --- apache_1.3.26/src/main/http_config.c Sun Jan 20 15:14:37 2002 +++ apache_1.3.26_recvtimeout/src/main/http_config.c Sat Jan 26 14:17:26 2002 @@ -1417,6 +1417,7 @@ s->srm_confname = NULL; s->access_confname = NULL; s->timeout = 0; + s->recv_timeout = 0; s->keep_alive_timeout = 0; s->keep_alive = -1; s->keep_alive_max = -1; @@ -1470,6 +1471,9 @@ if (virt->timeout == 0) virt->timeout = main_server->timeout; + if (virt->recv_timeout == 0) + virt->recv_timeout = main_server->recv_timeout; + if (virt->keep_alive_timeout == 0) virt->keep_alive_timeout = main_server->keep_alive_timeout; @@ -1537,6 +1541,7 @@ s->limit_req_fieldsize = DEFAULT_LIMIT_REQUEST_FIELDSIZE; s->limit_req_fields = DEFAULT_LIMIT_REQUEST_FIELDS; s->timeout = DEFAULT_TIMEOUT; + s->recv_timeout = DEFAULT_RECV_TIMEOUT; s->keep_alive_timeout = DEFAULT_KEEPALIVE_TIMEOUT; s->keep_alive_max = DEFAULT_KEEPALIVE; s->keep_alive = 1; diff -ur apache_1.3.26/src/main/http_core.c apache_1.3.26_recvtimeout/src/main/http_core.c --- apache_1.3.26/src/main/http_core.c Wed Jan 16 16:34:32 2002 +++ apache_1.3.26_recvtimeout/src/main/http_core.c Sat Jan 26 14:17:26 2002 @@ -2165,6 +2165,17 @@ return NULL; } +static const char *set_recv_timeout(cmd_parms *cmd, void *dummy, char *arg) +{ + const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT); + if (err != NULL) { + return err; + } + + cmd->server->recv_timeout = atoi(arg); + return NULL; +} + static const char *set_keep_alive_timeout(cmd_parms *cmd, void *dummy, char *arg) { @@ -3274,6 +3285,7 @@ { "ServerPath", set_serverpath, NULL, RSRC_CONF, TAKE1, "The pathname the server can be reached at" }, { "Timeout", set_timeout, NULL, RSRC_CONF, TAKE1, "Timeout duration (sec)" }, +{ "RecvTimeout", set_recv_timeout, NULL, RSRC_CONF, TAKE1, "Timeout duration for receiving requests (sec)" }, { "KeepAliveTimeout", set_keep_alive_timeout, NULL, RSRC_CONF, TAKE1, "Keep-Alive timeout duration (sec)"}, { "MaxKeepAliveRequests", set_keep_alive_max, NULL, RSRC_CONF, TAKE1, diff -ur apache_1.3.26/src/main/http_main.c apache_1.3.26_recvtimeout/src/main/http_main.c --- apache_1.3.26/src/main/http_main.c Sun Jan 20 17:45:14 2002 +++ apache_1.3.26_recvtimeout/src/main/http_main.c Sat Jan 26 14:17:26 2002 @@ -1686,7 +1686,7 @@ if (r->connection->keptalive) to = r->server->keep_alive_timeout; else - to = r->server->timeout; + to = r->server->recv_timeout; ap_set_callback_and_alarm(timeout, to); } @@ -1707,6 +1707,25 @@ #endif timeout_name = name; ap_set_callback_and_alarm(timeout, r->server->timeout); +} + +API_EXPORT(void) ap_hard_recv_timeout(char *name, request_rec *r) +{ +#ifdef NETWARE + get_tsd +#endif + timeout_req = r; + timeout_name = name; + ap_set_callback_and_alarm(timeout, r->server->recv_timeout); +} + +API_EXPORT(void) ap_soft_recv_timeout(char *name, request_rec *r) +{ +#ifdef NETWARE + get_tsd +#endif + timeout_name = name; + ap_set_callback_and_alarm(timeout, r->server->recv_timeout); } API_EXPORT(void) ap_kill_timeout(request_rec *dummy) diff -ur apache_1.3.26/src/main/http_protocol.c apache_1.3.26_recvtimeout/src/main/http_protocol.c --- apache_1.3.26/src/main/http_protocol.c Mon Jan 21 16:56:43 2002 +++ apache_1.3.26_recvtimeout/src/main/http_protocol.c Sat Jan 26 14:17:26 2002 @@ -1172,7 +1172,7 @@ return NULL; } if (!r->assbackwards) { - ap_hard_timeout("read request headers", r); + ap_hard_recv_timeout("read request headers", r); get_mime_headers(r); ap_kill_timeout(r); if (r->status != HTTP_REQUEST_TIME_OUT) { @@ -2232,7 +2232,7 @@ r->connection->keepalive = -1; return OK; } - ap_hard_timeout("reading request body", r); + ap_hard_recv_timeout("reading request body", r); while ((rv = ap_get_client_block(r, dumpbuf, HUGE_STRING_LEN)) > 0) continue; ap_kill_timeout(r); diff -ur apache_1.3.26/src/modules/proxy/proxy_http.c apache_1.3.26_recvtimeout/src/modules/proxy/proxy_http.c --- apache_1.3.26/src/modules/proxy/proxy_http.c Sun Jan 20 15:14:37 2002 +++ apache_1.3.26_recvtimeout/src/modules/proxy/proxy_http.c Sat Jan 26 14:24:50 2002 @@ -421,7 +421,7 @@ */ { /* send the request data, if any. */ - ap_hard_timeout("proxy receive request data", r); + ap_hard_recv_timeout("proxy receive request data", r); if (ap_should_client_block(r)) { while ((i = ap_get_client_block(r, buffer, sizeof buffer)) > 0) { ap_reset_timeout(r); diff -ur apache_1.3.26/src/modules/standard/mod_info.c apache_1.3.26_recvtimeout/src/modules/standard/mod_info.c --- apache_1.3.26/src/modules/standard/mod_info.c Fri Mar 9 05:10:34 2001 +++ apache_1.3.26_recvtimeout/src/modules/standard/mod_info.c Sat Jan 26 14:17:26 2002 @@ -511,8 +511,9 @@ ap_excess_requests_per_child); ap_rprintf(r, "Timeouts: " "connection: %d    " + "recv: %d    " "keep-alive: %d
", - serv->timeout, serv->keep_alive_timeout); + serv->timeout, serv->recv_timeout, serv->keep_alive_timeout); ap_rprintf(r, "Server Root: " "%s
\n", ap_server_root); ap_rprintf(r, "Config File: "