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]

Reply via email to