pier 01/07/19 16:59:15
Added: catalina/src/share/org/apache/catalina/connector/warp
Constants.java WarpConfigurationHandler.java
WarpLogger.java
Log:
New WARP classes.
Revision Changes Path
1.1
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/Constants.java
Index: Constants.java
===================================================================
/* ========================================================================= *
* *
* The Apache Software License, Version 1.1 *
* *
* Copyright (c) 1999-2001 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 <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 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 <http://www.apache.org/>. *
* *
* ========================================================================= */
package org.apache.catalina.connector.warp;
public class Constants {
/** Our package name. */
public static final String PACKAGE="org.apache.catalina.connector.warp";
/** Compile-in debug flag. */
public static final boolean DEBUG=false;
/**
* The WARP protocol major version.
*/
public static final int VERS_MAJOR=0;
/**
* The WARP protocol minor version.
*/
public static final int VERS_MINOR=9;
/**
* INVALID: The packet type hasn't been set yet.
*/
public static final int TYPE_INVALID=-1;
/**
* ERROR: The last operation didn't completed correctly.
* <br>
* Payload description:<br>
* [string] An error message.<br>
*/
public static final int TYPE_ERROR=0x00;
/**
* DISCONNECT: The connection is being closed.
* <br>
* No payload:<br>
*/
public static final int TYPE_DISCONNECT=0xfe;
/**
* FATAL: A protocol error occourred, the connection must be closed.
* <br>
* Payload description:<br>
* [string] An error message.<br>
*/
public static final int TYPE_FATAL=0xff;
/**
* CONF_WELCOME: The server issues this packet when a connection is
* opened. The server awaits for configuration information.
* <br>
* Payload description:<br>
* [ushort] Major protocol version.<br>
* [ushort] Minor protocol version.<br>
* [integer] The server unique-id.<br>
*/
public static final int TYPE_CONF_WELCOME=0x01;
/**
* CONF_DEPLOY: The client attempts deploy a web application.
* <br>
* Payload description:<br>
* [string] The application name.<br>
* [string] The virtual host name.<br>
* [ushort] The virtual host port.<br>
* [string] The web-application URL path.<br>
*/
public static final int TYPE_CONF_DEPLOY=0x02;
/**
* CONF_APPLIC: The server replies to a CONF_DEPLOY message with the web
* application identifier of the configured application.
* <br>
* Payload description:<br>
* [integer] The web application unique id for this server.<br>
* [string] The web application real path (where it's expanded).<br>
*/
public static final int TYPE_CONF_APPLIC=0x03;
/**
* CONF_DONE: Client issues this message when all configurations have been
* processed.
* <br>
* No payload:<br>
*/
public static final int TYPE_CONF_DONE=0x04;
/**
* CONF_PROCEED: Server issues this message in response to a CONF_DONE
* message, to acknowledge its readiness to accept requests.
* <br>
* No payload:<br>
*/
public static final int TYPE_CONF_PROCEED=0x05;
public static final int TYPE_REQ_INIT=0x10;
public static final int TYPE_REQ_CONTENT=0x11;
public static final int TYPE_REQ_SCHEME=0x12;
public static final int TYPE_REQ_AUTH=0x13;
public static final int TYPE_REQ_HEADER=0x14;
public static final int TYPE_REQ_PROCEED=0x1f;
public static final int TYPE_RES_STATUS=0x20;
public static final int TYPE_RES_HEADER=0x21;
public static final int TYPE_RES_COMMIT=0x2f;
public static final int TYPE_RES_BODY=0x30;
public static final int TYPE_RES_DONE=0x3f;
}
1.1
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpConfigurationHandler.java
Index: WarpConfigurationHandler.java
===================================================================
/* ========================================================================= *
* *
* The Apache Software License, Version 1.1 *
* *
* Copyright (c) 1999-2001 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 <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 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 <http://www.apache.org/>. *
* *
* ========================================================================= */
package org.apache.catalina.connector.warp;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.apache.catalina.Container;
import org.apache.catalina.Context;
import org.apache.catalina.Deployer;
import org.apache.catalina.Host;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardContext;
public class WarpConfigurationHandler {
/* ==================================================================== */
/* Constructor */
/* ==================================================================== */
public WarpConfigurationHandler() {
super();
}
public boolean handle(WarpConnection connection, WarpPacket packet)
throws IOException {
WarpLogger logger=new WarpLogger(this);
logger.setContainer(connection.getConnector().getContainer());
// Prepare the Welcome packet
packet.setType(Constants.TYPE_CONF_WELCOME);
packet.writeUnsignedShort(Constants.VERS_MAJOR);
packet.writeUnsignedShort(Constants.VERS_MINOR);
packet.writeInteger(connection.getConnector().uniqueId);
connection.send(packet);
// Loop for configuration packets
while (true) {
connection.recv(packet);
switch (packet.getType()) {
case Constants.TYPE_CONF_DEPLOY: {
String appl=packet.readString();
String host=packet.readString();
int port=packet.readUnsignedShort();
String path=packet.readString();
Context context=null;
packet.reset();
if (Constants.DEBUG)
logger.log("Deploying web application \""+appl+"\" "+
"under <http://"+host+":"+port+path+">");
try {
context=deploy(connection,logger,appl,host,path);
} catch (Exception e) {
logger.log(e);
}
if (context==null) {
String msg="Error deploying web application \""+appl+
"\" under <http://"+host+":"+port+path+">";
logger.log(msg);
packet.setType(Constants.TYPE_ERROR);
packet.writeString(msg);
connection.send(packet);
} else {
int k=connection.getConnector().applicationId(context);
packet.setType(Constants.TYPE_CONF_APPLIC);
packet.writeInteger(k);
packet.writeString(context.getDocBase());
connection.send(packet);
if (Constants.DEBUG)
logger.debug("Application \""+appl+"\" deployed "+
"under <http://"+host+":"+port+path+
"> with root="+context.getDocBase()+
" ID="+k);
}
break;
}
case Constants.TYPE_CONF_DONE: {
return(true);
}
case Constants.TYPE_DISCONNECT: {
return(false);
}
default: {
String msg="Invalid packet with type "+packet.getType();
logger.log(msg);
packet.reset();
packet.setType(Constants.TYPE_FATAL);
packet.writeString(msg);
connection.send(packet);
return(false);
}
}
}
}
/** Deploy a web application */
private Context deploy(WarpConnection connection, WarpLogger logger,
String applName, String hostName, String applPath)
throws IOException {
synchronized (connection.getConnector()) {
Container container=connection.getConnector().getContainer();
Host host=(Host)container.findChild(hostName);
if (host==null) {
WarpHost whost=new WarpHost();
whost.setName(hostName);
whost.setParent(container);
whost.setAppBase(connection.getConnector().getAppBase());
whost.setDebug(connection.getConnector().getDebug());
container.addChild(whost);
host=whost;
if (Constants.DEBUG)
logger.debug("Created new host "+host.getName());
} else if (Constants.DEBUG) {
logger.debug("Reusing instance of Host \""+host.getName()+"\"");
}
// TODO: Set up mapping mechanism for performance
if (applPath.endsWith("/"))
applPath=applPath.substring(0,applPath.length()-1);
Context appl=(Context)host.findChild(applPath);
if (appl==null) {
if (Constants.DEBUG)
logger.debug("No application for \""+applPath+"\"");
Deployer deployer=(Deployer)host;
File file=new File(host.getAppBase()+File.separator+applName);
if (!file.isAbsolute()) {
file=new File(System.getProperty("catalina.home"),
host.getAppBase()+File.separator+applName);
}
if (!file.exists()) {
logger.log("Cannot find \""+file.getPath()+"\" for appl. \""+
applName);
return(null);
}
String path=file.getCanonicalPath();
URL url=new URL("file",null,path);
if (path.toLowerCase().endsWith(".war"))
url=new URL("jar:"+url.toString()+"!/");
if (Constants.DEBUG)
logger.debug("Application URL \""+url.toString()+"\"");
deployer.install(applPath, url);
StandardContext context=null;
context=(StandardContext)deployer.findDeployedApp(applPath);
context.setDebug(connection.getConnector().getDebug());
return(context);
} else {
if (Constants.DEBUG)
logger.debug("Found application for \""+appl.getName()+"\"");
return(appl);
}
}
}
}
1.1
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/warp/WarpLogger.java
Index: WarpLogger.java
===================================================================
/* ========================================================================= *
* *
* The Apache Software License, Version 1.1 *
* *
* Copyright (c) 1999-2001 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 <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 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 <http://www.apache.org/>. *
* *
* ========================================================================= */
package org.apache.catalina.connector.warp;
import org.apache.catalina.Container;
import org.apache.catalina.Logger;
public class WarpLogger {
/* ==================================================================== */
/* Variables */
/* ==================================================================== */
/* -------------------------------------------------------------------- */
/* Bean variables */
/** The <code>Container</code> instance processing requests. */
private Container container=null;
/** The source of log messages for this logger. */
private Object source=null;
/* ==================================================================== */
/* Constructor */
/* ==================================================================== */
/** Deny empty construction. */
private WarpLogger() {
super();
}
/**
* Construct a new instance of a <code>WarpConnector</code>.
*/
public WarpLogger(Object source) {
super();
this.source=source;
}
/* ==================================================================== */
/* Bean methods */
/* ==================================================================== */
/**
* Return the <code>Container</code> instance which will process all
* requests received by this <code>Connector</code>.
*/
public Container getContainer() {
return(this.container);
}
/**
* Set the <code>Container</code> instance which will process all requests
* received by this <code>Connector</code>.
*
* @param container The new Container to use
*/
public void setContainer(Container container) {
this.container=container;
}
/* ==================================================================== */
/* Logging and debugging methods */
/* ==================================================================== */
/** Log to the container logger with the specified level or to stderr */
private void log(String msg, Exception exc, int lev) {
if (this.container==null) {
dump(msg,exc);
return;
}
Logger logg=this.container.getLogger();
if (logg==null) {
dump(msg,exc);
return;
}
String cls="["+this.source.getClass().getName()+"] ";
if (msg==null) msg=cls;
else msg=cls.concat(msg);
if (exc==null) logg.log(msg,lev);
else logg.log(msg,exc,lev);
}
/** Invoked when we can't get a hold on the logger, dump to stderr */
private void dump(String message, Exception exception) {
String cls="["+this.source.getClass().getName()+"] ";
if (message!=null) {
System.err.print(cls);
System.err.println(message);
}
if (exception!=null) {
System.err.print(cls);
exception.printStackTrace(System.err);
}
}
/**
* If Constants.DEBUG was set true at compilation time, dump a debug
* message to Standard Error.
*
* @param message The message to dump.
*/
protected void debug(String message) {
if (Constants.DEBUG) this.log(message,null,Logger.DEBUG);
}
/**
* If Constants.DEBUG was set true at compilation time, dump an exception
* stack trace to Standard Error.
*
* @param exception The exception to dump.
*/
protected void debug(Exception exception) {
if (Constants.DEBUG) this.log(null,exception,Logger.DEBUG);
}
/**
* If Constants.DEBUG was set true at compilation time, dump a debug
* message and a related exception stack trace to Standard Error.
*
* @param exception The exception to dump.
* @param message The message to dump.
*/
protected void debug(String message, Exception exception) {
if (Constants.DEBUG) this.log(message,exception,Logger.DEBUG);
}
/**
* Log a message.
*
* @param message The message to log.
*/
protected void log(String message) {
this.log(message,null,Logger.ERROR);
}
/**
* Log an exception.
*
* @param exception The exception to log.
*/
protected void log(Exception exception) {
this.log(null,exception,Logger.ERROR);
}
/**
* Log an exception and related message.
*
* @param exception The exception to log.
* @param message The message to log.
*/
protected void log(String message, Exception exception) {
this.log(message,exception,Logger.ERROR);
}
}