Author: costin Date: Wed Apr 23 10:21:20 2008 New Revision: 650941 URL: http://svn.apache.org/viewvc?rev=650941&view=rev Log: Few more fixes and adapters to help testing.
Added: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/EchoAdapter.java (with props) tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/SleepAdapter.java (with props) Modified: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/CoyoteServer.java tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MapperAdapter.java tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MessageReader.java tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/StaticAdapter.java Modified: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/CoyoteServer.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/CoyoteServer.java?rev=650941&r1=650940&r2=650941&view=diff ============================================================================== --- tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/CoyoteServer.java (original) +++ tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/CoyoteServer.java Wed Apr 23 10:21:20 2008 @@ -5,7 +5,9 @@ import org.apache.coyote.Adapter; import org.apache.coyote.ProtocolHandler; import org.apache.coyote.http11.Http11NioProtocol; +import org.apache.coyote.http11.simple.SimpleProtocolHandler; import org.apache.juli.JdkLoggerConfig; +import org.apache.tomcat.util.buf.BufferInfo; import org.apache.tomcat.util.modeler.Registry; @@ -14,25 +16,37 @@ * */ public class CoyoteServer { - int port = 8800; - String args[]; + protected int port = 8800; + protected String args[]; // saved to allow additional param extraction + protected boolean daemon = false; + /** + * Note indicating the response is COMET. + */ + public static final int COMET_RES_NOTE = 2; + public static final int COMET_REQ_NOTE = 2; + + public static final int ADAPTER_RES_NOTE = 1; + public static final int ADAPTER_REQ_NOTE = 1; + protected ProtocolHandler proto; - Registry registry; + protected Registry registry; protected Adapter adapter; - int maxThreads = 20; + protected int maxThreads = 20; + boolean started = false; - public CoyoteServer() { + + public CoyoteServer() { } public CoyoteServer(int i) { - port = i; + setPort(i); } public CoyoteServer(int i, Adapter adapter) { - port = i; + setPort(i); addAdapter("/", adapter); } @@ -71,9 +85,12 @@ start(); } + public void setDaemon(boolean b) { + daemon = b; + } + public void init() { - new JdkLoggerConfig(); - initJMX(); + JdkLoggerConfig.loadCustom(); } protected void initAdapters() { @@ -83,7 +100,11 @@ } public void stop() throws Exception { + if (!started) { + return; + } proto.destroy(); + started = false; } /** @@ -100,32 +121,67 @@ } } - public void setPort() { + public void setPort(int port) { + initJMX(); this.port = port; } - + /** */ - public static ProtocolHandler getDefaultConnector(int port) { + public static ProtocolHandler getDefaultConnector(int port, boolean daemon) { +// try { +// Library.initialize("tcnative-1"); +// Http11AprProtocol proto = new Http11AprProtocol(); +// proto.setCompression("on"); +// proto.setCompressionMinSize(32); +// proto.setPort(port); +// proto.getEndpoint().setDaemon(daemon); +// return proto; +// } catch (Exception e) { +// e.printStackTrace(); +// //throw new RuntimeException(e); +// } + + SimpleProtocolHandler proto = new SimpleProtocolHandler(); + proto.setPort(port); + proto.setDaemon(daemon); + + return proto; + } + + public void setNioConnector() { Http11NioProtocol proto = new Http11NioProtocol(); proto.setCompression("on"); proto.setCompressionMinSize(32); proto.setPort(port); - proto.getEndpoint().setDaemon(false); - return proto; + proto.getEndpoint().setDaemon(daemon); + setConnector(proto); + } + + public void setConnector(ProtocolHandler h) { + this.proto = h; } public void start() { try { - proto = getDefaultConnector(port); + if (started) { + return; + } + if (proto == null) { + proto = getDefaultConnector(port, daemon); + } initAdapters(); registry.registerComponent(adapter, ":name=adapter" + (port), null); + registry.registerComponent(BufferInfo.get(), ":name=BufferInfo" + port, + "BufferInfo"); proto.setAdapter(adapter); registry.registerComponent(proto, ":name=ep-" + port, null); - proto.start(); proto.init(); + proto.start(); + + started = true; } catch (Throwable e) { e.printStackTrace(); } @@ -135,6 +191,10 @@ ManagementFactory.getPlatformMBeanServer(); registry = Registry.getRegistry(null, null); + } + + public boolean getStarted() { + return started; } } Added: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/EchoAdapter.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/EchoAdapter.java?rev=650941&view=auto ============================================================================== --- tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/EchoAdapter.java (added) +++ tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/EchoAdapter.java Wed Apr 23 10:21:20 2008 @@ -0,0 +1,46 @@ +package org.apache.coyote.adapters; + +import java.util.logging.Logger; + +import org.apache.coyote.Adapter; +import org.apache.coyote.Request; +import org.apache.coyote.Response; +import org.apache.coyote.client.AsyncHttp; +import org.apache.tomcat.util.buf.ByteChunk; +import org.apache.tomcat.util.net.SocketStatus; + +/** + * Response is plain/text, copy of the received request + */ +public class EchoAdapter implements Adapter { + Logger log = Logger.getLogger("coyote.static"); + + String contentType = "text/plain"; + + + public EchoAdapter() { + } + + public void service(Request req, final Response res) throws Exception { + ByteChunk reqBuf = new ByteChunk(1024); + reqBuf.append("REQ HEAD:\n"); + AsyncHttp.serializeRequest(req, reqBuf); + reqBuf.append("CONTENT_LENGTH:") + .append(Integer.toString(req.getContentLength())) + .append("\n"); + + res.setStatus(200); + res.setContentLength(reqBuf.getLength()); + res.setContentType(contentType); + + res.sendHeaders(); + + res.doWrite(reqBuf); + } + + public boolean event(Request req, Response res, SocketStatus status) + throws Exception { + return false; + } + +} \ No newline at end of file Propchange: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/EchoAdapter.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MapperAdapter.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MapperAdapter.java?rev=650941&r1=650940&r2=650941&view=diff ============================================================================== --- tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MapperAdapter.java (original) +++ tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MapperAdapter.java Wed Apr 23 10:21:20 2008 @@ -185,12 +185,17 @@ } // Final processing - MessageWriter.getWriter(req, res, 0).flush(); - res.finish(); - - req.recycle(); - res.recycle(); + // TODO: only if not commet, this doesn't work with the + // other connectors since we don't have the info + // TODO: add this note in the nio/apr connectors + // TODO: play nice with TomcatLite, other adapters that flush/close + if (res.getNote(CoyoteServer.COMET_RES_NOTE) == null) { + MessageWriter.getWriter(req, res, 0).flush(); + res.finish(); + req.recycle(); + res.recycle(); + } } public Mapper getMapper() { Modified: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MessageReader.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MessageReader.java?rev=650941&r1=650940&r2=650941&view=diff ============================================================================== --- tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MessageReader.java (original) +++ tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/MessageReader.java Wed Apr 23 10:21:20 2008 @@ -66,13 +66,13 @@ /** - * The byte buffer. + * The byte buffer. More data may be added to it while reading. */ private ByteChunk bb; /** - * The chunk buffer. + * The chunk buffer, will be filled in from the bb. */ private CharChunk cb; @@ -100,13 +100,6 @@ */ private boolean closed = false; - - /** - * Byte chunk used to input bytes. - */ - private ByteChunk inputChunk = new ByteChunk(); - - /** * Encoding to use. */ @@ -120,9 +113,10 @@ /** - * List of encoders. + * Cached encoders. */ - protected HashMap encoders = new HashMap(); + protected HashMap<String, B2CConverter> encoders = + new HashMap<String, B2CConverter>(); /** @@ -156,9 +150,7 @@ * Default constructor. Allocate the buffer with the default buffer size. */ public MessageReader() { - this(DEFAULT_BUFFER_SIZE); - } @@ -168,7 +160,6 @@ * @param size Buffer size to use */ public MessageReader(int size) { - this.size = size; bb = new ByteChunk(size); bb.setLimit(size); @@ -178,7 +169,6 @@ cb.setOptimizedWrite(false); cb.setCharInputChannel(this); cb.setCharOutputChannel(this); - } @@ -323,7 +313,10 @@ enc = s; } - + /** + * Called when a read(char[]) operation is lacking data. It will read + * bytes. + */ public int realReadChars(char cbuf[], int off, int len) throws IOException { @@ -451,18 +444,8 @@ } - public void checkConverter() - throws IOException { - - if (!gotEnc) - setConverter(); - - } - - protected void setConverter() throws IOException { - if (coyoteRequest != null) enc = coyoteRequest.getCharacterEncoding(); @@ -471,33 +454,8 @@ enc = DEFAULT_ENCODING; conv = (B2CConverter) encoders.get(enc); if (conv == null) { - if (packageDefinitionEnabled && System.getSecurityManager() != null) { - //SecurityUtil.isPackageProtectionEnabled()){ - try{ - conv = (B2CConverter)AccessController.doPrivileged( - new PrivilegedExceptionAction(){ - - public Object run() throws IOException{ - return new B2CConverter(enc); - } - - } - ); - }catch(PrivilegedActionException ex){ - Exception e = ex.getException(); - if (e instanceof IOException) - throw (IOException)e; - } - } else { - conv = new B2CConverter(enc); - } - encoders.put(enc, conv); + conv = new B2CConverter(enc); + encoders.put(enc, conv); } - } - - private static boolean packageDefinitionEnabled = - (System.getProperty("package.definition") == null && - System.getProperty("package.access") == null) ? false : true; - } Added: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/SleepAdapter.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/SleepAdapter.java?rev=650941&view=auto ============================================================================== --- tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/SleepAdapter.java (added) +++ tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/SleepAdapter.java Wed Apr 23 10:21:20 2008 @@ -0,0 +1,57 @@ +package org.apache.coyote.adapters; + +import java.io.FileInputStream; +import java.io.IOException; + +import org.apache.coyote.ActionCode; +import org.apache.coyote.Request; +import org.apache.coyote.Response; +import org.apache.tomcat.util.net.SocketStatus; + +/** + * Test adapters that sleeps. + */ +public class SleepAdapter extends StaticAdapter { + long t1; + long t2; + long t3; + long t4; + + public SleepAdapter() { + } + + public SleepAdapter sleep(long t1, long t2, long t3, + long t4) { + this.t1 = t1; + this.t2 = t2; + this.t3 = t3; + this.t4 = t4; + return this; + } + + public SleepAdapter sleep(long t1) { + return sleep(t1, t1, t1, t1); + } + + public void service(Request req, final Response res) throws Exception { + Thread.currentThread().sleep(t1); + res.setStatus(200); + if (!chunked) { + res.setContentLength(mb.length() * 2); + } + res.setContentType(contentType); + res.sendHeaders(); + + Thread.currentThread().sleep(t2); + + res.doWrite(mb); + res.action(ActionCode.ACTION_CLIENT_FLUSH, res); + + Thread.currentThread().sleep(t3); + + res.doWrite(mb); + + Thread.currentThread().sleep(t4); + } + +} \ No newline at end of file Propchange: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/SleepAdapter.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/StaticAdapter.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/StaticAdapter.java?rev=650941&r1=650940&r2=650941&view=diff ============================================================================== --- tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/StaticAdapter.java (original) +++ tomcat/sandbox/tomcat-lite/coyote-extensions/org/apache/coyote/adapters/StaticAdapter.java Wed Apr 23 10:21:20 2008 @@ -20,8 +20,6 @@ public class StaticAdapter implements Adapter { Logger log = Logger.getLogger("coyote.static"); ByteChunk mb = new ByteChunk(); - int len = 4096; - byte[] data; boolean chunked = false; @@ -29,7 +27,7 @@ public StaticAdapter() { - init(); + setDefault(4096); } public StaticAdapter chunked() { @@ -37,6 +35,25 @@ return this; } + public StaticAdapter setData(byte[] data) { + mb.recycle(); + mb.setBytes(data, 0, data.length); + return this; + } + + public StaticAdapter setData(CharSequence data) { + mb.recycle(); + try { + mb.append(data); + } catch (IOException e) { + } + return this; + } + + public void setContentType(String ct) { + this.contentType = ct; + } + public void setFile(String path) { try { FileInputStream fis = new FileInputStream(path); @@ -48,14 +65,13 @@ while ((rd = fis.read(b)) > 0) { mb.append(b, 0, rd); } - len = mb.getLength(); } catch (IOException e) { throw new RuntimeException(e); } } - public void init() { - data = new byte[len]; + private void setDefault(int len) { + byte[] data = new byte[len]; for (int i = 0; i < len; i++) { data[i] = 'A'; } @@ -66,7 +82,7 @@ res.setStatus(200); if (!chunked) { - res.setContentLength(len); + res.setContentLength(mb.length()); } res.setContentType(contentType); res.sendHeaders(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]