costin 01/11/26 08:53:57
Modified: jk/java/org/apache/ajp Ajp13.java
Removed: jk/java/org/apache/ajp Ajp14.java
Log:
Merge logic from Ajp14 in Ajp13, removing the duplicated code.
The difference is that if Ajp13 is configured with a 'setBackward( false )' it'll
require an auth phase and support all additional handlers ( negotiation, etc ).
Otherwise it'll
behave as it did before, as a 'basic' ajp13 worker ( important for 3.2.x where 14 is
unlikely
to get ported, and 4.0 where 14 is not yet completed ).
Revision Changes Path
1.20 +69 -5 jakarta-tomcat-connectors/jk/java/org/apache/ajp/Ajp13.java
Index: Ajp13.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/Ajp13.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- Ajp13.java 2001/11/21 20:49:54 1.19
+++ Ajp13.java 2001/11/26 16:53:57 1.20
@@ -74,6 +74,7 @@
import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.http.MimeHeaders;
import org.apache.tomcat.util.http.HttpMessages;
+import org.apache.tomcat.util.http.BaseRequest;
/**
* Represents a single, persistent connection between the web server and
@@ -93,6 +94,8 @@
* @author Dan Milstein [[EMAIL PROTECTED]]
* @author Keith Wannamaker [[EMAIL PROTECTED]]
* @author Kevin Seguin [[EMAIL PROTECTED]]
+ * @author Henri Gomez [[EMAIL PROTECTED]]
+ * @author Costin Manolache
*/
public class Ajp13 {
@@ -134,14 +137,26 @@
boolean end_of_stream; // true if we've received an empty packet
// Required handler - essential request processing
- public RequestHandler reqHandler=new RequestHandler();
+ public RequestHandler reqHandler;
+ // AJP14 - detect protocol,set communication parameters, login
+ // If no password is set, use only Ajp13 messaging
+ boolean backwardCompat=true;
+ boolean logged=false;
public Ajp13() {
super();
initBuf();
+ reqHandler=new RequestHandler();
reqHandler.init( this );
}
+ public Ajp13(RequestHandler reqHandler ) {
+ super();
+ initBuf();
+ this.reqHandler=reqHandler;
+ reqHandler.init( this );
+ }
+
/** Will be overriden
*/
public void initBuf() {
@@ -159,6 +174,7 @@
blen = 0;
pos = 0;
end_of_stream = false;
+ logged=false;
}
/**
@@ -175,6 +191,22 @@
pos = 0;
}
+ /**
+ * Backward compat mode, no login needed
+ */
+ public void setBackward(boolean b)
+ {
+ backwardCompat=b;
+ }
+
+ public boolean isLogged() {
+ return logged;
+ }
+
+ void setLogged( boolean b ) {
+ logged=b;
+ }
+
// -------------------- Handlers registry --------------------
static final int MAX_HANDLERS=32;
@@ -217,7 +249,7 @@
* if there were errors in the reading of the request, and -2 if the
* server is asking the container to shut itself down.
*/
- public int receiveNextRequest(AjpRequest req) throws IOException {
+ public int receiveNextRequest(BaseRequest req) throws IOException {
if (debug > 0) {
logger.log("receiveNextRequest()");
}
@@ -248,18 +280,49 @@
/** Override for ajp14, temporary
*/
- public int handleMessage( int type, Ajp13Packet hBuf, AjpRequest req )
+ public int handleMessage( int type, Ajp13Packet hBuf, BaseRequest req )
throws IOException
{
+ if( type > handlers.length ) {
+ logger.log( "Invalid handler " + type );
+ return 500;
+ }
+
+ if( debug > 0 )
+ logger.log( "Received " + type + " " + handlerName[type]);
+
+ // Ajp14, unlogged
+ if( ! backwardCompat && ! isLogged() ) {
+ if( type != NegociationHandler.JK_AJP14_LOGINIT_CMD &&
+ type != NegociationHandler.JK_AJP14_LOGCOMP_CMD ) {
+
+ logger.log( "Ajp14 error: not logged " +
+ type + " " + handlerName[type]);
+
+ return 300;
+ }
+ // else continue
+ }
+
+ // Ajp13 messages
switch(type) {
-
case RequestHandler.JK_AJP13_FORWARD_REQUEST:
return reqHandler.decodeRequest(this, hBuf, req);
case JK_AJP13_SHUTDOWN:
return -2;
}
- return 200; // XXX This is actually an error condition
+
+ // logged || loging message
+ AjpHandler handler=handlers[type];
+ if( handler==null ) {
+ logger.log( "Unknown message " + type + handlerName[type] );
+ return 200;
+ }
+
+ if( debug > 0 )
+ logger.log( "Ajp14 handler " + handler );
+ return handler.handleAjpMessage( type, this, hBuf, req );
}
// ==================== Servlet Input Support =================
@@ -469,6 +532,7 @@
if(null !=in) {
in.close();
}
+ setLogged( false ); // no more logged now
}
// -------------------- Debug --------------------
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>