billbarker 02/03/19 21:33:27
Modified: http11/src/java/org/apache/coyote/http11
Http11Processor.java
Log:
Add support for MaxKeepAliveRequests like in Apache httpd.
This is primarily a protection against DoS attacks. With this enabled, we
eventually gracefully drop a Keep-Alive connection for greedy clients. By default,
this is currently disabled (so no change in the behavior). It needs to be set by the
Adaptor to have any effect.
Revision Changes Path
1.11 +26 -0
jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java
Index: Http11Processor.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Http11Processor.java 15 Mar 2002 19:02:58 -0000 1.10
+++ Http11Processor.java 20 Mar 2002 05:33:27 -0000 1.11
@@ -200,6 +200,11 @@
= org.apache.commons.logging.LogFactory.getLog(Http11Processor.class);
+ /**
+ * Maximum number of Keep-Alive requests to honor.
+ */
+ protected int maxKeepAliveRequests=-1;
+
// --------------------------------------------------------- Public Methods
@@ -262,6 +267,22 @@
/**
+ * Set the maximum number of Keep-Alive requests to honor.
+ * This is to safeguard from DoS attacks. Setting to a negative
+ * value disables the check.
+ */
+ public void setMaxKeepAliveRequests(int mkar) {
+ maxKeepAliveRequests = mkar;
+ }
+
+ /**
+ * Return the number of Keep-Alive requests that we will honor.
+ */
+ public int getMaxKeepAliveRequests() {
+ return maxKeepAliveRequests;
+ }
+
+ /**
* Process pipelined HTTP requests using the specified input and output
* streams.
*
@@ -281,6 +302,8 @@
error = false;
keepAlive = true;
+ int keepAliveLeft=maxKeepAliveRequests;
+
while (started && !error && keepAlive) {
try {
@@ -298,6 +321,9 @@
// Setting up filters, and parse some request headers
prepareRequest();
+
+ if(maxKeepAliveRequests > 0 && --keepAliveLeft == 0)
+ keepAlive=false;
// Process the request in the adapter
if (!error) {
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>