costin 02/01/06 00:52:38 Added: jk/java/org/apache/jk/server/tomcat33 JkRequest33.java JkResponse33.java JkServlet33.java Worker33.java Removed: jk/java/org/apache/jk/server/tomcat33 Ajp14Interceptor.java Log: Remove Ajp14Interceptor ( from jk2, it's still part of the stable jk14 ). It is no longer needed, a simple servlet is enough. Added the 3.3 specific servlet, the request/response adapters and the Worker ( which receives the requests and calls ContextManager.service() ). Revision Changes Path 1.1 jakarta-tomcat-connectors/jk/java/org/apache/jk/server/tomcat33/JkRequest33.java Index: JkRequest33.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.jk.server.tomcat33; import java.io.*; import java.net.*; import java.util.*; import org.apache.jk.*; import org.apache.jk.core.*; import org.apache.jk.common.*; import org.apache.tomcat.modules.server.PoolTcpConnector; import org.apache.tomcat.core.*; import org.apache.tomcat.util.net.*; import org.apache.tomcat.util.buf.*; import org.apache.tomcat.util.log.*; import org.apache.tomcat.util.http.*; class JkRequest33 extends Request { BaseRequest ajpReq; Channel ch; Endpoint ep; public JkRequest33(BaseRequest ajpReq) { headers = ajpReq.headers(); methodMB=ajpReq.method(); protoMB=ajpReq.protocol(); uriMB = ajpReq.requestURI(); queryMB = ajpReq.queryString(); remoteAddrMB = ajpReq.remoteAddr(); remoteHostMB = ajpReq.remoteHost(); serverNameMB = ajpReq.serverName(); // XXX sync cookies scookies = new Cookies( headers ); urlDecoder=new UDecoder(); // XXX sync headers params.setQuery( queryMB ); params.setURLDecoder( urlDecoder ); params.setHeaders( headers ); initRequest(); this.ajpReq=ajpReq; } public void setEndpoint( Channel ch, Endpoint ep ) { this.ch=ch; this.ep=ep; } // -------------------- Wrappers for changed method names, and to use the buffers public int getServerPort() { return ajpReq.getServerPort(); } public void setServerPort(int i ) { ajpReq.setServerPort( i ); } public void setRemoteUser( String s ) { super.setRemoteUser(s); ajpReq.remoteUser().setString(s); } public String getRemoteUser() { String s=ajpReq.remoteUser().toString(); if( s == null ) s=super.getRemoteUser(); return s; } public String getAuthType() { return ajpReq.authType().toString(); } public void setAuthType(String s ) { ajpReq.authType().setString(s); } public String getJvmRoute() { return ajpReq.jvmRoute().toString(); } public void setJvmRoute(String s ) { ajpReq.jvmRoute().setString(s); } // XXX scheme public boolean isSecure() { return ajpReq.getSecure(); } public int getContentLength() { int i=ajpReq.getContentLength(); if( i >= 0 ) return i; i= super.getContentLength(); return i; } public void setContentLength( int i ) { super.setContentLength(i); // XXX sync } // -------------------- Attributes -------------------- public void setAttribute(String name, Object value) { ajpReq.setAttribute( name, value ); } public Object getAttribute(String name) { if (name == null) { return null; } return ajpReq.getAttribute( name ); } // XXX broken // public Iterator getAttributeNames() { // return attributes.keySet().iterator(); // } // -------------------- public void recycle() { super.recycle(); ajpReq.recycle(); } public String dumpRequest() { return ajpReq.toString(); } // -------------------- // XXX This should go away if we introduce an InputBuffer. // We almost have it as result of encoding fixes, but for now // just keep this here, doesn't hurt too much. public int doRead() throws IOException { if( available <= 0 ) return -1; // available--; // return ajp13.reqHandler.doRead(ajp13); return -1; } public int doRead(byte[] b, int off, int len) throws IOException { if( available <= 0 ) return -1; // int rd=ajp13.reqHandler.doRead( ajp13, b,off, len ); // available -= rd; // return rd; return -1; } } 1.1 jakarta-tomcat-connectors/jk/java/org/apache/jk/server/tomcat33/JkResponse33.java Index: JkResponse33.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.jk.server.tomcat33; import java.io.*; import java.net.*; import java.util.*; import org.apache.jk.*; import org.apache.jk.core.*; import org.apache.jk.common.*; import org.apache.tomcat.modules.server.PoolTcpConnector; import org.apache.tomcat.core.*; import org.apache.tomcat.util.net.*; import org.apache.tomcat.util.buf.*; import org.apache.tomcat.util.log.*; import org.apache.tomcat.util.http.*; class JkResponse33 extends Response { boolean finished=false; Channel ch; Endpoint ep; int headersMsgNote; int c2bConvertersNote; int utfC2bNote; public JkResponse33(WorkerEnv we) { super(); headersMsgNote=we.getNoteId( WorkerEnv.ENDPOINT_NOTE, "headerMsg" ); utfC2bNote=we.getNoteId( WorkerEnv.ENDPOINT_NOTE, "utfC2B" ); } public void setEndpoint( Channel ch, Endpoint ep ) { this.ch=ch; this.ep=ep; MsgAjp msg=(MsgAjp)ep.getNote( headersMsgNote ); if( msg==null ) { msg=new MsgAjp(); ep.setNote( headersMsgNote, msg ); } } public void recycle() { super.recycle(); finished=false; } // XXX if more headers that MAX_SIZE, send 2 packets! // XXX Can be implemented using module notification, no need to extend public void endHeaders() throws IOException { super.endHeaders(); if (request.protocol().isNull()) { return; } C2B c2b=(C2B)ep.getNote( utfC2bNote ); if( c2b==null ) { c2b=new C2B( "UTF8" ); ep.setNote( utfC2bNote, c2b ); } MsgAjp msg=(MsgAjp)ep.getNote( headersMsgNote ); msg.reset(); msg.appendByte(HandlerRequest.JK_AJP13_SEND_HEADERS); msg.appendInt( getStatus() ); // s->b conversion, message msg.appendBytes( null ); // XXX add headers int numHeaders = headers.size(); msg.appendInt(numHeaders); for( int i=0; i<numHeaders; i++ ) { MessageBytes hN=headers.getName(i); // no header to sc conversion - there's little benefit // on this direction c2b.convert ( hN ); msg.appendBytes( hN ); MessageBytes hV=headers.getValue(i); c2b.convert( hV ); msg.appendBytes( hV ); } msg.send( ch, ep ); if( dL > 0 ) d("Sending head"); } // XXX Can be implemented using module notification, no need to extend public void finish() throws IOException { if(!finished) { super.finish(); finished = true; // Avoid END_OF_RESPONSE sent 2 times MsgAjp msg=(MsgAjp)ep.getNote( headersMsgNote ); msg.reset(); msg.appendByte( HandlerRequest.JK_AJP13_END_RESPONSE ); msg.appendInt( 1 ); msg.send(ch, ep ); if( dL > 0 ) d( "sending end message " ); } } // XXX Can be implemented using the buffers, no need to extend public void doWrite( byte b[], int off, int len) throws IOException { MsgAjp msg=(MsgAjp)ep.getNote( headersMsgNote ); msg.reset(); msg.appendByte( HandlerRequest.JK_AJP13_SEND_BODY_CHUNK); msg.appendBytes( b, off, len ); msg.send( ch, ep ); if( dL > 0 ) d( "sending block " + len ); } private static final int dL=0; private static void d(String s ) { System.err.println( "JkResponse33: " + s ); } } 1.1 jakarta-tomcat-connectors/jk/java/org/apache/jk/server/tomcat33/JkServlet33.java Index: JkServlet33.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.jk.server.tomcat33; import java.io.*; import java.net.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.jk.core.*; import org.apache.jk.common.*; import org.apache.jk.server.*; import org.apache.tomcat.util.net.*; import org.apache.tomcat.util.buf.*; import org.apache.tomcat.util.http.*; import org.apache.tomcat.core.*; /** * Tomcat specific adapter */ public class JkServlet33 extends JkServlet { ContextManager cm; public JkServlet33() { } public void init(ServletConfig conf) throws ServletException { d("init"); } public void destroy() { d("Shuting down"); } public void initializeContainer(ServletConfig cfg) { d("Initializing 4.0 for jk requests"); ServletContext sctx=cfg.getServletContext(); Context ctx=(Context)sctx.getAttribute( Context.ATTRIB_REAL_CONTEXT ); if( ctx==null ) { d("Untrusted app or error, ctx==null "); return; } cm=ctx.getContextManager(); // We now have control over the whole thing ! // We could register an interceptor to be notified registerInterceptors(); // start Jk JkMain jkMain=new JkMain(); jkMain.setProperties( servletConfig2properties( cfg )); Worker33 worker=new Worker33(); worker.setContextManager( cm ); jkMain.setDefaultWorker( worker ); try { jkMain.start(); } catch( Exception ex ) { ex.printStackTrace(); } } public void registerInterceptors() { } private static final int dL=0; private static void d(String s ) { System.err.println( "JkServlet33: " + s ); } } 1.1 jakarta-tomcat-connectors/jk/java/org/apache/jk/server/tomcat33/Worker33.java Index: Worker33.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.jk.server.tomcat33; import java.io.*; import java.net.*; import java.util.*; import org.apache.jk.*; import org.apache.jk.core.*; import org.apache.jk.common.*; import org.apache.tomcat.modules.server.PoolTcpConnector; import org.apache.tomcat.core.*; import org.apache.tomcat.util.net.*; import org.apache.tomcat.util.buf.*; import org.apache.tomcat.util.log.*; import org.apache.tomcat.util.http.*; import org.apache.jk.core.*; /** Tomcat 33 worker * */ public class Worker33 extends Worker { ContextManager cm; public Worker33() { super(); } private int reqNote; public void init(WorkerEnv we) throws IOException { reqNote=we.getNoteId( WorkerEnv.REQUEST_NOTE, "tomcat33Request" ); } public void setContextManager( ContextManager cm ) { this.cm=cm; } public void service( BaseRequest req, Channel ch, Endpoint ep ) throws IOException { d("Incoming request " ); JkRequest33 treq=(JkRequest33)req.getNote( reqNote ); JkResponse33 tres; if( treq==null ) { treq=new JkRequest33(req); req.setNote( reqNote, treq ); tres=new JkResponse33(we); treq.setResponse( tres ); cm.initRequest( treq, tres ); } tres=(JkResponse33)treq.getResponse(); treq.setEndpoint( ch, ep ); tres.setEndpoint( ch, ep ); try { cm.service( treq, tres ); } catch(Exception ex ) { ex.printStackTrace(); } } private static final int dL=0; private static void d(String s ) { System.err.println( "Worker33: " + s ); } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>