hgomez 2003/09/25 08:24:44 Modified: jk/java/org/apache/jk/common HandlerRequest.java MsgAjp.java JkMX.java jk/java/org/apache/jk/core WorkerEnv.java Msg.java MsgContext.java jk/java/org/apache/ajp Ajp13.java Ajp13Packet.java NegociationHandler.java RequestHandler.java jk/java/org/apache/ajp/tomcat33 Ajp14Interceptor.java jk/java/org/apache/ajp/tomcat4 Ajp13Processor.java Log: Update ajp13 support in JTC to handle PING/PONG. Review is more than welcomed Revision Changes Path 1.26 +20 -5 jakarta-tomcat-connectors/jk/java/org/apache/jk/common/HandlerRequest.java Index: HandlerRequest.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/common/HandlerRequest.java,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- HandlerRequest.java 17 May 2003 03:21:33 -0000 1.25 +++ HandlerRequest.java 25 Sep 2003 15:24:43 -0000 1.26 @@ -89,7 +89,7 @@ * - GET_BODY_CHUNK. Request a chunk of body data * - END_RESPONSE. Notify the end of a request processing. * - * @author Henri Gomez [EMAIL PROTECTED] + * @author Henri Gomez [EMAIL PROTECTED] * @author Dan Milstein [EMAIL PROTECTED] * @author Keith Wannamaker [EMAIL PROTECTED] * @author Costin Manolache @@ -103,14 +103,15 @@ // Prefix codes for message types from server to container public static final byte JK_AJP13_FORWARD_REQUEST = 2; - - public static final byte JK_AJP13_SHUTDOWN = 7; + public static final byte JK_AJP13_SHUTDOWN = 7; + public static final byte JK_AJP13_PING_REQUEST = 8; // Prefix codes for message types from container to server public static final byte JK_AJP13_SEND_BODY_CHUNK = 3; public static final byte JK_AJP13_SEND_HEADERS = 4; public static final byte JK_AJP13_END_RESPONSE = 5; - public static final byte JK_AJP13_GET_BODY_CHUNK = 6; + public static final byte JK_AJP13_GET_BODY_CHUNK = 6; + public static final byte JK_AJP13_PONG_REPLY = 9; // Integer codes for common response header strings public static final int SC_RESP_CONTENT_TYPE = 0xA001; @@ -227,10 +228,14 @@ "JK_AJP13_FORWARD_REQUEST", this, null); // 2 - dispatch.registerMessageType( JK_AJP13_FORWARD_REQUEST, + dispatch.registerMessageType( JK_AJP13_SHUTDOWN, "JK_AJP13_SHUTDOWN", this, null); // 7 + dispatch.registerMessageType( JK_AJP13_PING_REQUEST, + "JK_AJP13_PING_REQUEST", + this, null); // 8 + // register outgoing messages handler dispatch.registerMessageType( JK_AJP13_SEND_BODY_CHUNK, // 3 "JK_AJP13_SEND_BODY_CHUNK", @@ -411,6 +416,16 @@ System.exit(0); return OK; + + // We got a PING REQUEST, quickly respond with a PONG + case JK_AJP13_PING_REQUEST: + msg.reset(); + msg.appendByte(JK_AJP13_PONG_REPLY); + ep.setType( JkHandler.HANDLE_SEND_PACKET ); + ep.getSource().invoke( msg, ep ); + + return OK; + default: System.err.println("Unknown message " + type ); msg.dump("Unknown message" ); 1.15 +1 -1 jakarta-tomcat-connectors/jk/java/org/apache/jk/common/MsgAjp.java Index: MsgAjp.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/common/MsgAjp.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- MsgAjp.java 18 Sep 2003 16:21:00 -0000 1.14 +++ MsgAjp.java 25 Sep 2003 15:24:43 -0000 1.15 @@ -73,7 +73,7 @@ * * @see Ajp14/Ajp13Packet * - * @author Henri Gomez [EMAIL PROTECTED] + * @author Henri Gomez [EMAIL PROTECTED] * @author Dan Milstein [EMAIL PROTECTED] * @author Keith Wannamaker [EMAIL PROTECTED] * @author Kevin Seguin 1.13 +41 -20 jakarta-tomcat-connectors/jk/java/org/apache/jk/common/JkMX.java Index: JkMX.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/common/JkMX.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- JkMX.java 2 Jun 2003 01:22:32 -0000 1.12 +++ JkMX.java 25 Sep 2003 15:24:44 -0000 1.13 @@ -76,8 +76,10 @@ public class JkMX extends JkHandler { MBeanServer mserver; - private int port=-1; - private String host; + private int port=-1; + private String host; + private int jrmpport=1099; + private String jrmphost="localhost"; public JkMX() { @@ -85,23 +87,41 @@ /* -------------------- Public methods -------------------- */ - /** Enable the MX4J internal adapter - */ - public void setPort( int i ) { - port=i; - } - - public int getPort() { - return port; - } - - public void setHost(String host ) { - this.host=host; - } - - public String getHost() { - return host; - } + /** Enable the MX4J internal adapter + */ + public void setPort( int i ) { + port=i; + } + + public int getPort() { + return port; + } + + public void setHost(String host ) { + this.host=host; + } + + public String getHost() { + return host; + } + + /** Enable the MX4J JRMP internal adapter + */ + public void setJRMPPort( int i ) { + jrmpport=i; + } + + public int getJRMPPort() { + return jrmpport; + } + + public void setJRMPHost(String host ) { + this.jrmphost=host; + } + + public String getJRMPHost() { + return jrmphost; + } /* ==================== Start/stop ==================== */ ObjectName serverName=null; @@ -181,10 +201,11 @@ "com.sun.jndi.rmi.registry.RegistryContextFactory"}, new String[] { "java.lang.Object", "java.lang.Object" }); + String jrpmurl = "rmi://" + jrmphost + ":" + Integer.toString(jrmpport) ; mserver.invoke( adaptor, "putNamingProperty", new Object[] { javax.naming.Context.PROVIDER_URL, - "rmi://localhost:1099"}, + jrpmurl}, new String[] { "java.lang.Object", "java.lang.Object" }); //mbean.putNamingProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); 1.11 +1 -1 jakarta-tomcat-connectors/jk/java/org/apache/jk/core/WorkerEnv.java Index: WorkerEnv.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/core/WorkerEnv.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- WorkerEnv.java 19 Apr 2003 20:59:54 -0000 1.10 +++ WorkerEnv.java 25 Sep 2003 15:24:44 -0000 1.11 @@ -66,7 +66,7 @@ * the jk object model. * * @author Gal Shachor - * @author Henri Gomez [EMAIL PROTECTED] + * @author Henri Gomez [EMAIL PROTECTED] * @author Dan Milstein [EMAIL PROTECTED] * @author Keith Wannamaker [EMAIL PROTECTED] * @author Kevin Seguin 1.8 +1 -1 jakarta-tomcat-connectors/jk/java/org/apache/jk/core/Msg.java Index: Msg.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/core/Msg.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- Msg.java 18 Sep 2003 16:21:01 -0000 1.7 +++ Msg.java 25 Sep 2003 15:24:44 -0000 1.8 @@ -71,7 +71,7 @@ * In a more generic sense, it's the event that drives the processing chain. * XXX Use Event, make Msg a particular case. * - * @author Henri Gomez [EMAIL PROTECTED] + * @author Henri Gomez [EMAIL PROTECTED] * @author Dan Milstein [EMAIL PROTECTED] * @author Keith Wannamaker [EMAIL PROTECTED] * @author Kevin Seguin 1.8 +1 -1 jakarta-tomcat-connectors/jk/java/org/apache/jk/core/MsgContext.java Index: MsgContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/core/MsgContext.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- MsgContext.java 18 Sep 2003 16:21:01 -0000 1.7 +++ MsgContext.java 25 Sep 2003 15:24:44 -0000 1.8 @@ -63,7 +63,7 @@ /** * - * @author Henri Gomez [EMAIL PROTECTED] + * @author Henri Gomez [EMAIL PROTECTED] * @author Dan Milstein [EMAIL PROTECTED] * @author Keith Wannamaker [EMAIL PROTECTED] * @author Kevin Seguin 1.26 +9 -8 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.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- Ajp13.java 18 Sep 2003 16:21:01 -0000 1.25 +++ Ajp13.java 25 Sep 2003 15:24:44 -0000 1.26 @@ -86,7 +86,7 @@ * @author Dan Milstein [EMAIL PROTECTED] * @author Keith Wannamaker [EMAIL PROTECTED] * @author Kevin Seguin [EMAIL PROTECTED] - * @author Henri Gomez [EMAIL PROTECTED] + * @author Henri Gomez [EMAIL PROTECTED] * @author Costin Manolache */ public class Ajp13 { @@ -97,9 +97,6 @@ public static final int MAX_READ_SIZE = MAX_PACKET_SIZE - H_SIZE - 2; public static final int MAX_SEND_SIZE = MAX_PACKET_SIZE - H_SIZE - 4; - // Prefix codes for message types from server to container - public static final byte JK_AJP13_SHUTDOWN = 7; - // Error code for Ajp13 public static final int JK_AJP13_BAD_HEADER = -100; public static final int JK_AJP13_NO_HEADER = -101; @@ -310,7 +307,10 @@ case RequestHandler.JK_AJP13_FORWARD_REQUEST: return reqHandler.decodeRequest(this, hBuf, req); - case JK_AJP13_SHUTDOWN: + case RequestHandler.JK_AJP13_PING_REQUEST: + return reqHandler.sendPong(this, outBuf); + + case RequestHandler.JK_AJP13_SHUTDOWN: return -2; } @@ -359,9 +359,10 @@ numHeaders); } - public void sendHeader(String name, String value) throws IOException { - reqHandler.sendHeader( outBuf, name, value ); - } + public void sendHeader(String name, String value) throws IOException { + reqHandler.sendHeader( outBuf, name, value ); + } + public void endSendHeaders() throws IOException { reqHandler.endSendHeaders(this, outBuf); 1.12 +1 -1 jakarta-tomcat-connectors/jk/java/org/apache/ajp/Ajp13Packet.java Index: Ajp13Packet.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/Ajp13Packet.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Ajp13Packet.java 18 Sep 2003 16:21:01 -0000 1.11 +++ Ajp13Packet.java 25 Sep 2003 15:24:44 -0000 1.12 @@ -73,7 +73,7 @@ * * @see Ajp14/Ajp13Packet * - * @author Henri Gomez [EMAIL PROTECTED] + * @author Henri Gomez [EMAIL PROTECTED] * @author Dan Milstein [EMAIL PROTECTED] * @author Keith Wannamaker [EMAIL PROTECTED] * @author Kevin Seguin 1.7 +3 -5 jakarta-tomcat-connectors/jk/java/org/apache/ajp/NegociationHandler.java Index: NegociationHandler.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/NegociationHandler.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- NegociationHandler.java 18 Sep 2003 16:21:01 -0000 1.6 +++ NegociationHandler.java 25 Sep 2003 15:24:44 -0000 1.7 @@ -71,15 +71,13 @@ * exchange information about supported messages on each end. * * - * @author Henri Gomez [EMAIL PROTECTED] + * @author Henri Gomez [EMAIL PROTECTED] * @author Dan Milstein [EMAIL PROTECTED] * @author Keith Wannamaker [EMAIL PROTECTED] * @author Costin Manolache */ public class NegociationHandler extends AjpHandler { - public static final byte JK_AJP13_SHUTDOWN=7; - // Initial Login Phase (web server -> servlet engine) public static final byte JK_AJP14_LOGINIT_CMD=0x10; @@ -254,7 +252,7 @@ this, null); // ajp14.registerMessageType( JK_AJP14_LOGCOMP_CMD,"JK_AJP14_LOGCOMP_CMD", this, null); // - ajp14.registerMessageType( JK_AJP13_SHUTDOWN,"JK_AJP13_SHUTDOWN", + ajp14.registerMessageType( RequestHandler.JK_AJP13_SHUTDOWN,"JK_AJP13_SHUTDOWN", this, null); // ajp14.registerMessageType( JK_AJP14_CONTEXT_QRY_CMD, "JK_AJP14_CONTEXT_QRY_CMD", @@ -293,7 +291,7 @@ return handleLogInit(ch, hBuf, outBuf); case JK_AJP14_LOGCOMP_CMD : return handleLogComp(ch, hBuf, outBuf); - case JK_AJP13_SHUTDOWN: + case RequestHandler.JK_AJP13_SHUTDOWN: return -2; case JK_AJP14_CONTEXT_QRY_CMD : return handleContextQuery(ch, hBuf, outBuf); 1.18 +39 -4 jakarta-tomcat-connectors/jk/java/org/apache/ajp/RequestHandler.java Index: RequestHandler.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/RequestHandler.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- RequestHandler.java 18 Sep 2003 16:21:01 -0000 1.17 +++ RequestHandler.java 25 Sep 2003 15:24:44 -0000 1.18 @@ -76,6 +76,8 @@ * * This object can handle the following incoming messages: * - "FORWARD_REQUEST" input message ( sent when a request is passed from the web server ) + * - "PING REQUEST" input message (sent by the web server to determine if tomcat is not frozen, + * a PONG REPLY will be sent back) * - "RECEIVE_BODY_CHUNK" input ( sent by container to pass more body, in response to GET_BODY_CHUNK ) * * It can handle the following outgoing messages: @@ -84,7 +86,7 @@ * - GET_BODY_CHUNK. Request a chunk of body data * - END_RESPONSE. Notify the end of a request processing. * - * @author Henri Gomez [EMAIL PROTECTED] + * @author Henri Gomez [EMAIL PROTECTED] * @author Dan Milstein [EMAIL PROTECTED] * @author Keith Wannamaker [EMAIL PROTECTED] * @author Costin Manolache @@ -94,14 +96,17 @@ // XXX Will move to a registry system. // Prefix codes for message types from server to container - public static final byte JK_AJP13_FORWARD_REQUEST = 2; + public static final byte JK_AJP13_FORWARD_REQUEST = 2; + public static final byte JK_AJP13_SHUTDOWN = 7; + public static final byte JK_AJP13_PING_REQUEST = 8; // Prefix codes for message types from container to server public static final byte JK_AJP13_SEND_BODY_CHUNK = 3; public static final byte JK_AJP13_SEND_HEADERS = 4; public static final byte JK_AJP13_END_RESPONSE = 5; - public static final byte JK_AJP13_GET_BODY_CHUNK = 6; - + public static final byte JK_AJP13_GET_BODY_CHUNK = 6; + public static final byte JK_AJP13_PONG_REPLY = 9; + // Integer codes for common response header strings public static final int SC_RESP_CONTENT_TYPE = 0xA001; public static final int SC_RESP_CONTENT_LANGUAGE = 0xA002; @@ -221,6 +226,35 @@ ajp14.registerMessageType( JK_AJP13_GET_BODY_CHUNK, // 6 "JK_AJP13_GET_BODY_CHUNK", this, null ); + ajp14.registerMessageType( JK_AJP13_PING_REQUEST, + "JK_AJP13_PING_REQUEST", + this, null); // 8 + ajp14.registerMessageType( JK_AJP13_PONG_REPLY, + "JK_AJP13_PONG_REPLY", + this, null); // 9 + } + + /** + * Send a PONG REPLY to web server to its PING request + * + * @param ch the Ajp13 channel + * @param outBuf the Ajp13Packet output packet to use + */ + public int sendPong(Ajp13 ch, Ajp13Packet outBuf) + { + outBuf.reset(); + outBuf.appendByte(JK_AJP13_PONG_REPLY); + + try + { + ch.send(outBuf); + } + catch (IOException ioe) + { + log("can't send pong reply"); + } + + return (999); // success but no need to process farther } // -------------------- Incoming message -------------------- @@ -231,6 +265,7 @@ switch( type ) { case RequestHandler.JK_AJP13_FORWARD_REQUEST: return decodeRequest(channel, channel.hBuf, req ); + default: return UNKNOWN; } 1.12 +1 -0 jakarta-tomcat-connectors/jk/java/org/apache/ajp/tomcat33/Ajp14Interceptor.java Index: Ajp14Interceptor.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/tomcat33/Ajp14Interceptor.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Ajp14Interceptor.java 18 Sep 2003 16:21:01 -0000 1.11 +++ Ajp14Interceptor.java 25 Sep 2003 15:24:44 -0000 1.12 @@ -248,6 +248,7 @@ } } + // 999 low level requests are just ignored (ie ping/pong) if( status == 200) cm.service(req, res); else if (status == 500) { 1.13 +18 -6 jakarta-tomcat-connectors/jk/java/org/apache/ajp/tomcat4/Ajp13Processor.java Index: Ajp13Processor.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/ajp/tomcat4/Ajp13Processor.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- Ajp13Processor.java 18 Sep 2003 16:21:01 -0000 1.12 +++ Ajp13Processor.java 25 Sep 2003 15:24:44 -0000 1.13 @@ -414,8 +414,20 @@ break; } - if( status != 200 ) - break; + // Allready handled by low level proto, don't go farther + if( status == 999 ) + { + ajpRequest.recycle(); + request.recycle(); + + // recycle ajp13 object + ajp13.recycle(); + + continue; + } + + if( status != 200 ) + break; try { // set flag
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]