Return-Path: Mailing-List: contact tomcat-dev-help@jakarta.apache.org; run by ezmlm Delivered-To: mailing list tomcat-dev@jakarta.apache.org Received: (qmail 47234 invoked by uid 500); 8 Dec 2000 15:33:50 -0000 Delivered-To: apmail-jakarta-tomcat-4.0-cvs@apache.org Received: (qmail 47217 invoked by uid 1023); 8 Dec 2000 15:33:50 -0000 Date: 8 Dec 2000 15:33:50 -0000 Message-ID: <20001208153350.47215.qmail@locus.apache.org> From: pier@locus.apache.org To: jakarta-tomcat-4.0-cvs@apache.org Subject: cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp WarpResponse.java WarpOutputStream.java WarpInputStream.java WarpRequestHandler.java WarpRequest.java WarpHost.java WarpHandler.java WarpEngine.java WarpDebug.java WarpContext.java WarpConstants.java WarpConnector.java WarpConnectionHandler.java pier 00/12/08 07:33:49 Modified: catalina/src/share/org/apache/catalina/connector/warp WarpRequestHandler.java WarpRequest.java WarpHost.java WarpHandler.java WarpEngine.java WarpDebug.java WarpContext.java WarpConstants.java WarpConnector.java WarpConnectionHandler.java Added: catalina/src/share/org/apache/catalina/connector/warp WarpResponse.java WarpOutputStream.java WarpInputStream.java Log: Done. Revision Changes Path 1.5 +64 -15 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpRequestHandler.java Index: WarpRequestHandler.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpRequestHandler.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- WarpRequestHandler.java 2000/12/08 02:57:02 1.4 +++ WarpRequestHandler.java 2000/12/08 15:33:41 1.5 @@ -64,9 +64,10 @@ * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpRequestHandler.java,v 1.4 2000/12/08 02:57:02 pier Exp $ + * @version CVS $Id: WarpRequestHandler.java,v 1.5 2000/12/08 15:33:41 pier Exp $ */ public class WarpRequestHandler extends WarpHandler { + /** The WarpReader associated with this WarpConnectionHandler. */ private WarpReader reader=new WarpReader(); /** The WarpPacket used to write data. */ @@ -74,6 +75,11 @@ /** Wether we had an error in the request header. */ private boolean headererr=false; + /** The WarpRequest object associated with this request handler. */ + protected WarpRequest request=null; + /** The WarpRequest object associated with this request handler. */ + protected WarpResponse response=null; + /** * Process a WARP packet. *
@@ -91,47 +97,90 @@ * false if this was the last packet. */ public boolean process(int type, byte buffer[]) { + WarpConnector connector=this.getConnector(); + WarpEngine engine=(WarpEngine)connector.getContainer(); + String arg1=null; + String arg2=null; + int valu=-1; + this.reader.reset(buffer); this.packet.reset(); try { switch (type) { // The Request method case WarpConstants.TYP_REQINIT_MET: - if (DEBUG) this.debug("REQINIT_MET "+reader.readString()); + arg1=reader.readString(); + if (DEBUG) this.debug("Request Method "+arg1); + this.request.setMethod(arg1); break; + // The Request URI case WarpConstants.TYP_REQINIT_URI: - if (DEBUG) this.debug("REQINIT_URI "+reader.readString()); + arg1=reader.readString(); + if (DEBUG) this.debug("Request URI "+arg1); + this.request.setRequestURI(arg1); break; + // The Request query arguments case WarpConstants.TYP_REQINIT_ARG: - if (DEBUG) this.debug("REQINIT_ARG "+reader.readString()); + arg1=reader.readString(); + if (DEBUG) this.debug("Request Query Argument "+arg1); + this.request.setQueryString(arg1); break; + // The Request protocol case WarpConstants.TYP_REQINIT_PRO: - if (DEBUG) this.debug("REQINIT_PRO "+reader.readString()); + arg1=reader.readString(); + if (DEBUG) this.debug("Request Protocol "+arg1); + this.request.setProtocol(arg1); break; + // A request header case WarpConstants.TYP_REQINIT_HDR: - if (DEBUG) this.debug("REQINIT_HDR "+reader.readString()+ - ": "+reader.readString()); + arg1=reader.readString(); + arg2=reader.readString(); + if (DEBUG) this.debug("Request Header "+arg1+": "+arg2); + this.request.addHeader(arg1,arg2); break; + // A request variable case WarpConstants.TYP_REQINIT_VAR: - if (DEBUG) this.debug("REQINIT_VAR "+reader.readShort()+ - "="+reader.readString()); + valu=reader.readShort(); + arg1=reader.readString(); + if (DEBUG) this.debug("Request Variable ["+valu+"]="+arg1); break; + // The request header is finished, run the servlet (whohoo!) case WarpConstants.TYP_REQINIT_RUN: - if (DEBUG) this.debug("REQINIT_RUN"); + if (DEBUG) this.debug("Invoking request"); // Check if we can accept (or not) this request this.packet.reset(); - if (this.headererr) { - this.send(WarpConstants.TYP_REQINIT_ERR,this.packet); - return(false); - } this.send(WarpConstants.TYP_REQINIT_ACK,this.packet); - break; + WarpInputStream win=new WarpInputStream(this); + WarpOutputStream wout=new WarpOutputStream(this,response); + this.request.setStream(win); + this.response.setStream(wout); + this.response.setRequest(this.request); + try { + engine.invoke(this.request, this.response); + } catch (Exception e) { + this.log(e); + } + try { + this.response.flushBuffer(); + this.response.finishResponse(); + wout.flush(); + wout.close(); + } catch (Exception e) { + if (DEBUG) this.debug(e); + } + this.packet.reset(); + this.packet.writeString("End of request"); + this.send(WarpConstants.TYP_REQUEST_ACK,this.packet); + if (DEBUG) this.debug("End of request"); + return(false); + + // Other packet types default: this.log("Wrong packet type "+type); return(true); 1.2 +53 -3 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpRequest.java Index: WarpRequest.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpRequest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- WarpRequest.java 2000/12/07 21:12:55 1.1 +++ WarpRequest.java 2000/12/08 15:33:41 1.2 @@ -64,7 +64,7 @@ * @author
Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpRequest.java,v 1.1 2000/12/07 21:12:55 pier Exp $ + * @version CVS $Id: WarpRequest.java,v 1.2 2000/12/08 15:33:41 pier Exp $ */ public class WarpRequest extends HttpRequestBase { @@ -75,12 +75,47 @@ // -------------------------------------------------------- LOCAL VARIABLES - /** The Warp Host ID of this Host. */ + /** The Warp Host ID of this request. */ private int hostid=-1; + /** The Warp Application ID of this request. */ + private int applid=-1; + /** The Warp Request ID of this request. */ + private int id=-1; + /** The WarpRequestHandler associated with this request. */ + private WarpRequestHandler handler=null; // ----------------------------------------------------------- BEAN METHODS /** + * Return the WarpRequestHandler associated with this request. + */ + protected WarpRequestHandler getWarpRequestHandler() { + return(this.handler); + } + + /** + * Set the WarpRequestHandler associated with this request. + */ + protected void setWarpRequestHandler(WarpRequestHandler handler) { + this.handler=handler; + } + + /** + * Return the Host ID associated with this WarpRequest instance. + */ + protected int getRequestID() { + return(this.id); + } + + /** + * Set the Host ID associated with this WarpRequest instance. + */ + protected void setRequestID(int id) { + if (DEBUG) this.debug("Setting RequestID to "+id); + this.id=id; + } + + /** * Return the Host ID associated with this WarpRequest instance. */ protected int getRequestedHostID() { @@ -88,11 +123,26 @@ } /** - * Set the Host ID associated with this WarpRequest instance. + * Set the Application ID associated with this WarpRequest instance. */ protected void setRequestedHostID(int id) { if (DEBUG) this.debug("Setting request HostID to "+id); this.hostid=id; + } + + /** + * Return the Application ID associated with this WarpRequest instance. + */ + protected int getRequestedApplicationID() { + return(this.applid); + } + + /** + * Set the Host ID associated with this WarpRequest instance. + */ + protected void setRequestedApplicationID(int id) { + if (DEBUG) this.debug("Setting request ApplicationID to "+id); + this.applid=id; } // ------------------------------------------------------ DEBUGGING METHODS 1.3 +33 -3 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpHost.java Index: WarpHost.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpHost.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- WarpHost.java 2000/12/08 09:39:54 1.2 +++ WarpHost.java 2000/12/08 15:33:42 1.3 @@ -56,6 +56,9 @@ * ========================================================================= */ package org.apache.catalina.connector.warp; +import javax.servlet.ServletException; +import org.apache.catalina.Request; +import org.apache.catalina.Response; import java.io.IOException; import java.net.URL; import org.apache.catalina.Container; @@ -70,7 +73,7 @@ * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpHost.java,v 1.2 2000/12/08 09:39:54 pier Exp $ + * @version CVS $Id: WarpHost.java,v 1.3 2000/12/08 15:33:42 pier Exp $ */ public class WarpHost extends StandardHost { @@ -88,8 +91,6 @@ /** The ID to use for the next dynamically configured application. */ private int applid=0; - // --------------------------------------------------------- PUBLIC METHODS - /** * Create a new instance of a WarpHost. */ @@ -99,6 +100,35 @@ conf.setContextClass(cc); this.setContextClass(cc); this.addLifecycleListener(conf); + this.setDebug(9); + } + + // --------------------------------------------------------- PUBLIC METHODS + + public void invoke(Request req, Response res) + throws ServletException, IOException { + if (DEBUG) this.debug("Invoked"); + super.invoke(req,res); + } + + public Container map(Request request, boolean update) { + if (DEBUG) this.debug("Trying to map request to context"); + if (request instanceof WarpRequest) { + WarpRequest r=(WarpRequest)request; + + Container children[]=this.findChildren(); + for (int x=0; xPier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpHandler.java,v 1.6 2000/12/08 09:40:27 pier Exp $ + * @version CVS $Id: WarpHandler.java,v 1.7 2000/12/08 15:33:42 pier Exp $ */ public abstract class WarpHandler implements Lifecycle, Runnable { // -------------------------------------------------------------- CONSTANTS /** Our debug flag status (Used to compile out debugging information). */ - protected static final boolean DEBUG=WarpDebug.DEBUG; + protected static final boolean DEBUG=true; //WarpDebug.DEBUG; // -------------------------------------------------------- LOCAL VARIABLES 1.6 +38 -1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpEngine.java Index: WarpEngine.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpEngine.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- WarpEngine.java 2000/12/08 09:40:55 1.5 +++ WarpEngine.java 2000/12/08 15:33:43 1.6 @@ -75,7 +75,7 @@ * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpEngine.java,v 1.5 2000/12/08 09:40:55 pier Exp $ + * @version CVS $Id: WarpEngine.java,v 1.6 2000/12/08 15:33:43 pier Exp $ */ public class WarpEngine extends StandardEngine { @@ -102,10 +102,47 @@ */ public WarpEngine() { super(); + super.addDefaultMapper(this.mapper); if (DEBUG) this.debug("New instance created"); + this.setDebug(9); } // --------------------------------------------------------- PUBLIC METHODS + + public void invoke(Request req, Response res) + throws ServletException, IOException { + if (DEBUG) this.debug("Invoked"); + super.invoke(req,res); + } + + public Container map(Request request, boolean update) { + if (DEBUG) this.debug("Trying to map request to host"); + if (request instanceof WarpRequest) { + WarpRequest r=(WarpRequest)request; + + Container children[]=this.findChildren(); + for (int x=0; xPier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpDebug.java,v 1.5 2000/12/08 09:41:34 pier Exp $ + * @version CVS $Id: WarpDebug.java,v 1.6 2000/12/08 15:33:43 pier Exp $ */ public class WarpDebug { // -------------------------------------------------------------- CONSTANTS /** Our debug flag status (Used to compile out debugging information). */ - public static final boolean DEBUG=false; + public static final boolean DEBUG=true; // -------------------------------------------------------- LOCAL VARIABLES 1.2 +25 -1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpContext.java Index: WarpContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpContext.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- WarpContext.java 2000/12/08 09:42:03 1.1 +++ WarpContext.java 2000/12/08 15:33:43 1.2 @@ -56,15 +56,20 @@ * ========================================================================= */ package org.apache.catalina.connector.warp; +import java.io.IOException; +import javax.servlet.ServletException; +import org.apache.catalina.Request; +import org.apache.catalina.Response; import org.apache.catalina.Container; import org.apache.catalina.core.StandardContext; +import org.apache.catalina.LifecycleException; /** * * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpContext.java,v 1.1 2000/12/08 09:42:03 pier Exp $ + * @version CVS $Id: WarpContext.java,v 1.2 2000/12/08 15:33:43 pier Exp $ */ public class WarpContext extends StandardContext { @@ -83,8 +88,17 @@ public WarpContext() { super(); if (DEBUG) this.debug("New instance created"); + this.setUseNaming(false); + this.setAvailable(true); + this.setDebug(9); } + public void invoke(Request req, Response res) + throws ServletException, IOException { + if (DEBUG) this.debug("Invoked (available="+this.getAvailable()+")"); + super.invoke(req,res); + } + // ----------------------------------------------------------- BEAN METHODS /** @@ -101,6 +115,16 @@ if (DEBUG) this.debug("Setting ApplicationID for context in path \""+ super.getName()+"\" to "+id); this.id=id; + } + + public void start() throws LifecycleException { + if (DEBUG) this.debug("Starting"); + super.start(); + } + + public void stop() throws LifecycleException { + if (DEBUG) this.debug("Stopping"); + super.stop(); } // ------------------------------------------------------ DEBUGGING METHODS 1.6 +8 -1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpConstants.java Index: WarpConstants.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpConstants.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- WarpConstants.java 2000/12/08 02:57:04 1.5 +++ WarpConstants.java 2000/12/08 15:33:43 1.6 @@ -62,7 +62,7 @@ * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpConstants.java,v 1.5 2000/12/08 02:57:04 pier Exp $ + * @version CVS $Id: WarpConstants.java,v 1.6 2000/12/08 15:33:43 pier Exp $ */ public class WarpConstants { @@ -98,4 +98,11 @@ public static final int TYP_REQINIT_RUN = 0x0001D; public static final int TYP_REQINIT_ERR = 0x0001E; public static final int TYP_REQINIT_ACK = 0x0001F; + + public static final int TYP_REQUEST_STA = 0x00020; + public static final int TYP_REQUEST_HDR = 0x00021; + public static final int TYP_REQUEST_CMT = 0x00022; + public static final int TYP_REQUEST_DAT = 0x00023; + public static final int TYP_REQUEST_ERR = 0x0002E; + public static final int TYP_REQUEST_ACK = 0x0002F; } 1.6 +2 -2 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpConnector.java Index: WarpConnector.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpConnector.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- WarpConnector.java 2000/12/08 09:42:49 1.5 +++ WarpConnector.java 2000/12/08 15:33:44 1.6 @@ -78,7 +78,7 @@ * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpConnector.java,v 1.5 2000/12/08 09:42:49 pier Exp $ + * @version CVS $Id: WarpConnector.java,v 1.6 2000/12/08 15:33:44 pier Exp $ */ public class WarpConnector implements Connector, Lifecycle, Runnable { @@ -166,7 +166,7 @@ * of a Response from the responsible Container. */ public Response createResponse() { - HttpResponseBase response = new HttpResponseBase(); + WarpResponse response=new WarpResponse(); response.setConnector(this); return (response); } 1.8 +34 -21 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpConnectionHandler.java Index: WarpConnectionHandler.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpConnectionHandler.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- WarpConnectionHandler.java 2000/12/08 09:44:04 1.7 +++ WarpConnectionHandler.java 2000/12/08 15:33:44 1.8 @@ -64,7 +64,7 @@ * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. - * @version CVS $Id: WarpConnectionHandler.java,v 1.7 2000/12/08 09:44:04 pier Exp $ + * @version CVS $Id: WarpConnectionHandler.java,v 1.8 2000/12/08 15:33:44 pier Exp $ */ public class WarpConnectionHandler extends WarpHandler { /** The WarpReader associated with this WarpConnectionHandler. */ @@ -91,14 +91,15 @@ * false if this was the last packet. */ public boolean process(int type, byte buffer[]) { - WarpEngine engine=(WarpEngine)this.getConnector().getContainer(); + WarpConnector connector=this.getConnector(); + WarpEngine engine=(WarpEngine)connector.getContainer(); this.reader.reset(buffer); this.packet.reset(); try { switch (type) { case WarpConstants.TYP_CONINIT_HST: { - String name=reader.readString()+":"+reader.readShort(); + String name=reader.readString()+"."+reader.readShort(); // Retrieve this host id int hid=engine.setupChild(name).getHostID(); @@ -126,12 +127,7 @@ } // Retrieve this application (based on the path) - WarpContext cont=(WarpContext)host.findChild(path); - // Check if we can find it by application name - if (cont==null) - cont=(WarpContext)host.findChild('/'+name); - - // We definitely didn't find the application + WarpContext cont=(WarpContext)host.findChild('/'+name); if (cont==null) { this.log("Application "+name+" with path "+path+ " not found"); @@ -142,10 +138,11 @@ // Ok, we found the right application int aid=cont.getApplicationID(); - cont.setPath(path); + cont.setPath('/'+name); cont.setDisplayName(name); if (DEBUG) this.debug("Application "+name+" mapped in "+ host.getName()+path+" has ID "+aid); + // Send the APPLICATION ID back to the WARP client this.packet.reset(); this.packet.writeShort(aid); @@ -154,28 +151,44 @@ } case WarpConstants.TYP_CONINIT_REQ: { + // Get the Host and Application IDs + int hid=reader.readShort(); + int aid=reader.readShort(); + if (DEBUG) this.debug("Request for HID="+hid+" AID="+aid); + // Create a new WarpRequestHandler and register it with // an unique RID. - int r=this.request; + int rid=this.request; WarpConnection c=this.getConnection(); WarpRequestHandler h=new WarpRequestHandler(); - // Iterate until a valid RID is found - c.registerHandler(h,r); - this.request=r+1; + + // TODO: Iterate until a valid RID is found + c.registerHandler(h,rid); + this.request=rid+1; h.setConnection(c); - h.setRequestID(r); + h.setRequestID(rid); + + // Send the RID back to the WARP client + this.packet.reset(); + this.packet.writeShort(rid); + this.send(WarpConstants.TYP_CONINIT_RID,this.packet); + + // Create new Request and Response objects. + h.request=(WarpRequest)connector.createRequest(); + h.response=(WarpResponse)connector.createResponse(); + h.request.setRequestID(rid); + h.request.setRequestedHostID(hid); + h.request.setRequestedApplicationID(aid); + h.request.setWarpRequestHandler(h); + h.response.setWarpRequestHandler(h); + + // Start the request handler try { h.start(); } catch (Exception e) { this.log(e); h.stop(); } - if (DEBUG) this.debug("CONINIT_REQ "+reader.readShort()+ - ":"+reader.readShort()+"="+r); - // Send the RID back to the WARP client - this.packet.reset(); - this.packet.writeShort(r); - this.send(WarpConstants.TYP_CONINIT_RID,this.packet); break; } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpResponse.java Index: WarpResponse.java =================================================================== /* ========================================================================= * * * * The Apache Software License, Version 1.1 * * * * Copyright (c) 1999, 2000 The Apache Software Foundation. * * All rights reserved. * * * * ========================================================================= * * * * Redistribution and use in source and binary forms, with or without modi- * * fication, are permitted provided that the following conditions are met: * * * * 1. Redistributions of source code must retain the above copyright notice * * 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 ." * * * * 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 . * * * * 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 Software Foundation. * * * * 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 indivi- * * duals on behalf of the Apache Software Foundation. For more information * * on the Apache Software Foundation, please see . * * * * ========================================================================= */ package org.apache.catalina.connector.warp; import org.apache.catalina.connector.HttpResponseBase; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import java.util.TimeZone; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpUtils; import org.apache.catalina.HttpResponse; import org.apache.catalina.Globals; import org.apache.catalina.Logger; import org.apache.catalina.util.CookieTools; import org.apache.catalina.util.RequestUtil; /** * * * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. * @version CVS $Id: WarpResponse.java,v 1.1 2000/12/08 15:33:41 pier Exp $ */ public class WarpResponse extends HttpResponseBase { // -------------------------------------------------------------- CONSTANTS /** Our debug flag status (Used to compile out debugging information). */ private static final boolean DEBUG=WarpDebug.DEBUG; /** The WarpRequestHandler associated with this response. */ private WarpRequestHandler handler=null; /** The WarpPacket used to write data. */ private WarpPacket packet=new WarpPacket(); private boolean committed=false; /** * Return the WarpRequestHandler associated with this response. */ protected WarpRequestHandler getWarpRequestHandler() { return(this.handler); } /** * Set the WarpRequestHandler associated with this response. */ protected void setWarpRequestHandler(WarpRequestHandler handler) { this.handler=handler; } public boolean isCommitted() { return(this.committed); } protected void sendHeaders() throws IOException { if (DEBUG) this.debug("Sending status and headers"); if (isCommitted()) return; this.packet.reset(); String prot=request.getRequest().getProtocol(); this.packet.writeString(prot); this.packet.writeShort(status); if (message != null) this.packet.writeString(message); else this.packet.writeString(""); this.handler.send(WarpConstants.TYP_REQUEST_STA,this.packet); if (DEBUG) this.debug(prot+" "+status+((message==null)?(""):(" "+message))); // Send the content-length and content-type headers (if any) if (getContentType() != null) { this.packet.reset(); this.packet.writeString("Content-Type"); this.packet.writeString(getContentType()); this.handler.send(WarpConstants.TYP_REQUEST_HDR,this.packet); if (DEBUG) this.debug("Content-Type: "+getContentType()); } if (getContentLength() >= 0) { this.packet.reset(); this.packet.writeString("Content-Length"); this.packet.writeString(Integer.toString(getContentLength())); this.handler.send(WarpConstants.TYP_REQUEST_HDR,this.packet); if (DEBUG) this.debug("Content-Type: "+getContentType()); } // Send all specified headers (if any) synchronized (headers) { Iterator names = headers.keySet().iterator(); while (names.hasNext()) { String name = (String) names.next(); ArrayList values = (ArrayList) headers.get(name); Iterator items = values.iterator(); while (items.hasNext()) { String value = (String) items.next(); this.packet.reset(); this.packet.writeString(name); this.packet.writeString(value); this.handler.send(WarpConstants.TYP_REQUEST_HDR,this.packet); if (DEBUG) this.debug(name+": "+value); } } } // Add the session ID cookie if necessary HttpServletRequest hreq=(HttpServletRequest)request.getRequest(); HttpSession session=hreq.getSession(false); if ((session!=null) && session.isNew() && getContext().getCookies()) { Cookie cookie=new Cookie(Globals.SESSION_COOKIE_NAME,session.getId()); cookie.setMaxAge(-1); String contextPath = null; if (context != null) contextPath = context.getPath(); if ((contextPath != null) && (contextPath.length() > 0)) { cookie.setPath(contextPath); } else { cookie.setPath("/"); } if (hreq.isSecure()) cookie.setSecure(true); addCookie(cookie); } // Send all specified cookies (if any) synchronized (cookies) { Iterator items = cookies.iterator(); while (items.hasNext()) { Cookie cookie = (Cookie) items.next(); String name=CookieTools.getCookieHeaderName(cookie); String value=CookieTools.getCookieHeaderValue(cookie); this.packet.reset(); this.packet.writeString(name); this.packet.writeString(value); this.handler.send(WarpConstants.TYP_REQUEST_HDR,this.packet); if (DEBUG) this.debug(name+": "+value); } } // Commit the headers this.packet.reset(); this.handler.send(WarpConstants.TYP_REQUEST_CMT,this.packet); this.committed = true; } // ------------------------------------------------------ DEBUGGING METHODS /** * Dump a debug message. */ private void debug(String msg) { if (DEBUG) WarpDebug.debug(this,msg); } /** * Dump information for an Exception. */ private void debug(Exception exc) { if (DEBUG) WarpDebug.debug(this,exc); } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpOutputStream.java Index: WarpOutputStream.java =================================================================== /* ========================================================================= * * * * The Apache Software License, Version 1.1 * * * * Copyright (c) 1999, 2000 The Apache Software Foundation. * * All rights reserved. * * * * ========================================================================= * * * * Redistribution and use in source and binary forms, with or without modi- * * fication, are permitted provided that the following conditions are met: * * * * 1. Redistributions of source code must retain the above copyright notice * * 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 ." * * * * 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 . * * * * 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 Software Foundation. * * * * 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 indivi- * * duals on behalf of the Apache Software Foundation. For more information * * on the Apache Software Foundation, please see . * * * * ========================================================================= */ package org.apache.catalina.connector.warp; import java.io.OutputStream; import java.io.IOException; /** * * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. * @version CVS $Id: WarpOutputStream.java,v 1.1 2000/12/08 15:33:42 pier Exp $ */ public class WarpOutputStream extends OutputStream { private WarpRequestHandler handler=null; private WarpResponse response=null; private byte buffer[]=new byte[4096]; private int pos=0; private boolean closed=false; // -------------------------------------------------------------- CONSTANTS /** Our debug flag status (Used to compile out debugging information). */ private static final boolean DEBUG=WarpDebug.DEBUG; private WarpOutputStream() { super(); } public WarpOutputStream(WarpRequestHandler handler, WarpResponse response) { super(); this.handler=handler; this.response=response; } public void write(int k) throws IOException { if (closed) throw new IOException(); buffer[pos++]=(byte)k; if (pos==4096) this.flush(); } public void flush() throws IOException { if (closed) throw new IOException(); if (DEBUG) this.debug("Flushing "+pos+" bytes"); this.response.sendHeaders(); this.handler.send(WarpConstants.TYP_REQUEST_DAT,buffer,0,pos); pos=0; } public void close() throws IOException { if (closed) throw new IOException(); this.flush(); closed=true; if (DEBUG) this.debug("Closed"); } // ------------------------------------------------------ DEBUGGING METHODS /** * Dump a debug message. */ private void debug(String msg) { if (DEBUG) WarpDebug.debug(this,msg); } /** * Dump information for an Exception. */ private void debug(Exception exc) { if (DEBUG) WarpDebug.debug(this,exc); } } 1.1 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpInputStream.java Index: WarpInputStream.java =================================================================== /* ========================================================================= * * * * The Apache Software License, Version 1.1 * * * * Copyright (c) 1999, 2000 The Apache Software Foundation. * * All rights reserved. * * * * ========================================================================= * * * * Redistribution and use in source and binary forms, with or without modi- * * fication, are permitted provided that the following conditions are met: * * * * 1. Redistributions of source code must retain the above copyright notice * * 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 ." * * * * 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 . * * * * 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 Software Foundation. * * * * 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 indivi- * * duals on behalf of the Apache Software Foundation. For more information * * on the Apache Software Foundation, please see . * * * * ========================================================================= */ package org.apache.catalina.connector.warp; import java.io.InputStream; import java.io.IOException; /** * * @author Pier Fumagalli * @author Copyright © 1999, 2000 The * Apache Software Foundation. * @version CVS $Id: WarpInputStream.java,v 1.1 2000/12/08 15:33:42 pier Exp $ */ public class WarpInputStream extends InputStream { private WarpRequestHandler handler=null; private WarpInputStream() { super(); } public WarpInputStream(WarpRequestHandler handler) { super(); this.handler=handler; } public int read() throws IOException { return(-1); } }