Author: mturk Date: Tue Jul 18 08:16:38 2006 New Revision: 423110 URL: http://svn.apache.org/viewvc?rev=423110&view=rev Log: Add svn:eol-style:native
Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java (contents, props changed) Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=423110&r1=423109&r2=423110&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java Tue Jul 18 08:16:38 2006 @@ -1,673 +1,673 @@ -/* - * Copyright 1999-2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.coyote.http11; - -import java.net.InetAddress; -import java.net.Socket; -import java.net.URLEncoder; -import java.util.HashMap; -import java.util.Iterator; -import java.util.concurrent.Executor; - -import javax.management.MBeanRegistration; -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import org.apache.coyote.ActionCode; -import org.apache.coyote.ActionHook; -import org.apache.coyote.Adapter; -import org.apache.coyote.ProtocolHandler; -import org.apache.coyote.RequestGroupInfo; -import org.apache.coyote.RequestInfo; -import org.apache.tomcat.util.modeler.Registry; -import org.apache.tomcat.util.net.JIoEndpoint; -import org.apache.tomcat.util.net.SSLImplementation; -import org.apache.tomcat.util.net.ServerSocketFactory; -import org.apache.tomcat.util.net.JIoEndpoint.Handler; -import org.apache.tomcat.util.res.StringManager; - - -/** - * Abstract the protocol implementation, including threading, etc. - * Processor is single threaded and specific to stream-based protocols, - * will not fit Jk protocols like JNI. - * - * @author Remy Maucherat - * @author Costin Manolache - * @deprecated - */ -public class Http11Protocol - implements ProtocolHandler, MBeanRegistration { - - - protected static org.apache.commons.logging.Log log - = org.apache.commons.logging.LogFactory.getLog(Http11Protocol.class); - - /** - * The string manager for this package. - */ - protected static StringManager sm = - StringManager.getManager(Constants.Package); - - - // ------------------------------------------------------------ Constructor - - - public Http11Protocol() { - setSoLinger(Constants.DEFAULT_CONNECTION_LINGER); - setSoTimeout(Constants.DEFAULT_CONNECTION_TIMEOUT); - //setServerSoTimeout(Constants.DEFAULT_SERVER_SOCKET_TIMEOUT); - setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY); - } - - - // ----------------------------------------------------------------- Fields - - - protected Http11ConnectionHandler cHandler = new Http11ConnectionHandler(this); - protected JIoEndpoint endpoint = new JIoEndpoint(); - - - // * - protected ObjectName tpOname = null; - // * - protected ObjectName rgOname = null; - - - protected ServerSocketFactory socketFactory = null; - protected SSLImplementation sslImplementation = null; - - - // ----------------------------------------- ProtocolHandler Implementation - // * - - - protected HashMap<String, Object> attributes = new HashMap<String, Object>(); - - - /** - * Pass config info - */ - public void setAttribute(String name, Object value) { - if (log.isTraceEnabled()) { - log.trace(sm.getString("http11protocol.setattribute", name, value)); - } - attributes.put(name, value); - } - - public Object getAttribute(String key) { - return attributes.get(key); - } - - public Iterator getAttributeNames() { - return attributes.keySet().iterator(); - } - - - /** - * The adapter, used to call the connector. - */ - protected Adapter adapter; - public void setAdapter(Adapter adapter) { this.adapter = adapter; } - public Adapter getAdapter() { return adapter; } - - - public void init() throws Exception { - endpoint.setName(getName()); - endpoint.setHandler(cHandler); - - // Verify the validity of the configured socket factory - try { - if (secure) { - sslImplementation = - SSLImplementation.getInstance(sslImplementationName); - socketFactory = sslImplementation.getServerSocketFactory(); - endpoint.setServerSocketFactory(socketFactory); - } else if (socketFactoryName != null) { - socketFactory = (ServerSocketFactory) Class.forName(socketFactoryName).newInstance(); - endpoint.setServerSocketFactory(socketFactory); - } - } catch (Exception ex) { - log.error(sm.getString("http11protocol.socketfactory.initerror"), - ex); - throw ex; - } - - if (socketFactory!=null) { - Iterator<String> attE = attributes.keySet().iterator(); - while( attE.hasNext() ) { - String key = attE.next(); - Object v=attributes.get(key); - socketFactory.setAttribute(key, v); - } - } - - try { - endpoint.init(); - } catch (Exception ex) { - log.error(sm.getString("http11protocol.endpoint.initerror"), ex); - throw ex; - } - if (log.isInfoEnabled()) - log.info(sm.getString("http11protocol.init", getName())); - - } - - public void start() throws Exception { - if (this.domain != null) { - try { - tpOname = new ObjectName - (domain + ":" + "type=ThreadPool,name=" + getName()); - Registry.getRegistry(null, null) - .registerComponent(endpoint, tpOname, null ); - } catch (Exception e) { - log.error("Can't register endpoint"); - } - rgOname=new ObjectName - (domain + ":type=GlobalRequestProcessor,name=" + getName()); - Registry.getRegistry(null, null).registerComponent - ( cHandler.global, rgOname, null ); - } - - try { - endpoint.start(); - } catch (Exception ex) { - log.error(sm.getString("http11protocol.endpoint.starterror"), ex); - throw ex; - } - if (log.isInfoEnabled()) - log.info(sm.getString("http11protocol.start", getName())); - } - - public void pause() throws Exception { - try { - endpoint.pause(); - } catch (Exception ex) { - log.error(sm.getString("http11protocol.endpoint.pauseerror"), ex); - throw ex; - } - if (log.isInfoEnabled()) - log.info(sm.getString("http11protocol.pause", getName())); - } - - public void resume() throws Exception { - try { - endpoint.resume(); - } catch (Exception ex) { - log.error(sm.getString("http11protocol.endpoint.resumeerror"), ex); - throw ex; - } - if (log.isInfoEnabled()) - log.info(sm.getString("http11protocol.resume", getName())); - } - - public void destroy() throws Exception { - if (log.isInfoEnabled()) - log.info(sm.getString("http11protocol.stop", getName())); - endpoint.destroy(); - if (tpOname!=null) - Registry.getRegistry(null, null).unregisterComponent(tpOname); - if (rgOname != null) - Registry.getRegistry(null, null).unregisterComponent(rgOname); - } - - - // ------------------------------------------------------------- Properties - - - // * - /** - * This field indicates if the protocol is secure from the perspective of - * the client (= https is used). - */ - protected boolean secure; - public boolean getSecure() { return secure; } - public void setSecure(boolean b) { secure = b; } - - - /** - * Name of the socket factory. - */ - protected String socketFactoryName = null; - public String getSocketFactory() { return socketFactoryName; } - public void setSocketFactory(String valueS) { socketFactoryName = valueS; } - - - /** - * Name of the SSL implementation. - */ - protected String sslImplementationName=null; - public String getSSLImplementation() { return sslImplementationName; } - public void setSSLImplementation( String valueS) { - sslImplementationName = valueS; - setSecure(true); - } - - - // HTTP - /** - * Maximum number of requests which can be performed over a keepalive - * connection. The default is the same as for Apache HTTP Server. - */ - protected int maxKeepAliveRequests = 100; - public int getMaxKeepAliveRequests() { return maxKeepAliveRequests; } - public void setMaxKeepAliveRequests(int mkar) { maxKeepAliveRequests = mkar; } - - - // HTTP - /** - * This timeout represents the socket timeout which will be used while - * the adapter execution is in progress, unless disableUploadTimeout - * is set to true. The default is the same as for Apache HTTP Server - * (300 000 milliseconds). - */ - protected int timeout = 300000; - public int getTimeout() { return timeout; } - public void setTimeout(int timeout) { this.timeout = timeout; } - - - // * - /** - * Maximum size of the post which will be saved when processing certain - * requests, such as a POST. - */ - protected int maxSavePostSize = 4 * 1024; - public int getMaxSavePostSize() { return maxSavePostSize; } - public void setMaxSavePostSize(int valueI) { maxSavePostSize = valueI; } - - - // HTTP - /** - * Maximum size of the HTTP message header. - */ - protected int maxHttpHeaderSize = 8 * 1024; - public int getMaxHttpHeaderSize() { return maxHttpHeaderSize; } - public void setMaxHttpHeaderSize(int valueI) { maxHttpHeaderSize = valueI; } - - - // HTTP - /** - * If true, the regular socket timeout will be used for the full duration - * of the connection. - */ - protected boolean disableUploadTimeout = true; - public boolean getDisableUploadTimeout() { return disableUploadTimeout; } - public void setDisableUploadTimeout(boolean isDisabled) { disableUploadTimeout = isDisabled; } - - - // HTTP - /** - * Integrated compression support. - */ - protected String compression = "off"; - public String getCompression() { return compression; } - public void setCompression(String valueS) { compression = valueS; } - - - // HTTP - protected String noCompressionUserAgents = null; - public String getNoCompressionUserAgents() { return noCompressionUserAgents; } - public void setNoCompressionUserAgents(String valueS) { noCompressionUserAgents = valueS; } - - - // HTTP - protected String compressableMimeTypes = "text/html,text/xml,text/plain"; - public String getCompressableMimeType() { return compressableMimeTypes; } - public void setCompressableMimeType(String valueS) { compressableMimeTypes = valueS; } - - - // HTTP - protected int compressionMinSize = 2048; - public int getCompressionMinSize() { return compressionMinSize; } - public void setCompressionMinSize(int valueI) { compressionMinSize = valueI; } - - - // HTTP - /** - * User agents regular expressions which should be restricted to HTTP/1.0 support. - */ - protected String restrictedUserAgents = null; - public String getRestrictedUserAgents() { return restrictedUserAgents; } - public void setRestrictedUserAgents(String valueS) { restrictedUserAgents = valueS; } - - - // HTTP - /** - * Server header. - */ - protected String server; - public void setServer( String server ) { this.server = server; } - public String getServer() { return server; } - - - // --------------------------------------------------------- Public methods - - // * - public Executor getExecutor() { - return endpoint.getExecutor(); - } - - // * - public void setExecutor(Executor executor) { - endpoint.setExecutor(executor); - } - - // * - public int getMaxThreads() { - return endpoint.getMaxThreads(); - } - - // * - public void setMaxThreads( int maxThreads ) { - endpoint.setMaxThreads(maxThreads); - } - - // * - public void setThreadPriority(int threadPriority) { - endpoint.setThreadPriority(threadPriority); - } - - // * - public int getThreadPriority() { - return endpoint.getThreadPriority(); - } - - // * - public int getBacklog() { - return endpoint.getBacklog(); - } - - // * - public void setBacklog( int i ) { - endpoint.setBacklog(i); - } - - // * - public int getPort() { - return endpoint.getPort(); - } - - // * - public void setPort( int port ) { - endpoint.setPort(port); - } - - // * - public InetAddress getAddress() { - return endpoint.getAddress(); - } - - // * - public void setAddress(InetAddress ia) { - endpoint.setAddress( ia ); - } - - // * - public String getName() { - String encodedAddr = ""; - if (getAddress() != null) { - encodedAddr = "" + getAddress(); - if (encodedAddr.startsWith("/")) - encodedAddr = encodedAddr.substring(1); - encodedAddr = URLEncoder.encode(encodedAddr) + "-"; - } - return ("http-" + encodedAddr + endpoint.getPort()); - } - - // * - public boolean getTcpNoDelay() { - return endpoint.getTcpNoDelay(); - } - - // * - public void setTcpNoDelay( boolean b ) { - endpoint.setTcpNoDelay( b ); - } - - // * - public int getSoLinger() { - return endpoint.getSoLinger(); - } - - // * - public void setSoLinger( int i ) { - endpoint.setSoLinger( i ); - } - - // * - public int getSoTimeout() { - return endpoint.getSoTimeout(); - } - - // * - public void setSoTimeout( int i ) { - endpoint.setSoTimeout(i); - } - - // HTTP - /** - * Return the Keep-Alive policy for the connection. - */ - public boolean getKeepAlive() { - return ((maxKeepAliveRequests != 0) && (maxKeepAliveRequests != 1)); - } - - // HTTP - /** - * Set the keep-alive policy for this connection. - */ - public void setKeepAlive(boolean keepAlive) { - if (!keepAlive) { - setMaxKeepAliveRequests(1); - } - } - - /* - * Note: All the following are JSSE/java.io specific attributes. - */ - - public String getKeystore() { - return (String) getAttribute("keystore"); - } - - public void setKeystore( String k ) { - setAttribute("keystore", k); - } - - public String getKeypass() { - return (String) getAttribute("keypass"); - } - - public void setKeypass( String k ) { - attributes.put("keypass", k); - //setAttribute("keypass", k); - } - - public String getKeytype() { - return (String) getAttribute("keystoreType"); - } - - public void setKeytype( String k ) { - setAttribute("keystoreType", k); - } - - public String getClientauth() { - return (String) getAttribute("clientauth"); - } - - public void setClientauth( String k ) { - setAttribute("clientauth", k); - } - - public String getProtocols() { - return (String) getAttribute("protocols"); - } - - public void setProtocols(String k) { - setAttribute("protocols", k); - } - - public String getAlgorithm() { - return (String) getAttribute("algorithm"); - } - - public void setAlgorithm( String k ) { - setAttribute("algorithm", k); - } - - public String getCiphers() { - return (String) getAttribute("ciphers"); - } - - public void setCiphers(String ciphers) { - setAttribute("ciphers", ciphers); - } - - public String getKeyAlias() { - return (String) getAttribute("keyAlias"); - } - - public void setKeyAlias(String keyAlias) { - setAttribute("keyAlias", keyAlias); - } - - // ----------------------------------- Http11ConnectionHandler Inner Class - - protected static class Http11ConnectionHandler implements Handler { - protected Http11Protocol protocol; - protected static int count = 0; - protected RequestGroupInfo global = new RequestGroupInfo(); - protected ThreadLocal<Http11Processor> localProcessor = new ThreadLocal<Http11Processor>(); - - Http11ConnectionHandler(Http11Protocol proto) { - this.protocol = proto; - } - - public boolean process(Socket socket) { - Http11Processor processor = null; - try { - processor = localProcessor.get(); - if (processor == null) { - processor = - new Http11Processor(protocol.maxHttpHeaderSize, protocol.endpoint); - processor.setAdapter(protocol.adapter); - processor.setMaxKeepAliveRequests(protocol.maxKeepAliveRequests); - processor.setTimeout(protocol.timeout); - processor.setDisableUploadTimeout(protocol.disableUploadTimeout); - processor.setCompression(protocol.compression); - processor.setCompressionMinSize(protocol.compressionMinSize); - processor.setNoCompressionUserAgents(protocol.noCompressionUserAgents); - processor.setCompressableMimeTypes(protocol.compressableMimeTypes); - processor.setRestrictedUserAgents(protocol.restrictedUserAgents); - processor.setMaxSavePostSize(protocol.maxSavePostSize); - processor.setServer(protocol.server); - localProcessor.set(processor); - if (protocol.getDomain() != null) { - synchronized (this) { - try { - RequestInfo rp = processor.getRequest().getRequestProcessor(); - rp.setGlobalProcessor(global); - ObjectName rpName = new ObjectName - (protocol.getDomain() + ":type=RequestProcessor,worker=" - + protocol.getName() + ",name=HttpRequest" + count++); - Registry.getRegistry(null, null).registerComponent(rp, rpName, null); - } catch (Exception e) { - log.warn("Error registering request"); - } - } - } - } - - if (processor instanceof ActionHook) { - ((ActionHook) processor).action(ActionCode.ACTION_START, null); - } - - if (protocol.secure && (protocol.sslImplementation != null)) { - processor.setSSLSupport - (protocol.sslImplementation.getSSLSupport(socket)); - } else { - processor.setSSLSupport(null); - } - - processor.process(socket); - return false; - - } catch(java.net.SocketException e) { - // SocketExceptions are normal - Http11Protocol.log.debug - (sm.getString - ("http11protocol.proto.socketexception.debug"), e); - } catch (java.io.IOException e) { - // IOExceptions are normal - Http11Protocol.log.debug - (sm.getString - ("http11protocol.proto.ioexception.debug"), e); - } - // Future developers: if you discover any other - // rare-but-nonfatal exceptions, catch them here, and log as - // above. - catch (Throwable e) { - // any other exception or error is odd. Here we log it - // with "ERROR" level, so it will show up even on - // less-than-verbose logs. - Http11Protocol.log.error - (sm.getString("http11protocol.proto.error"), e); - } finally { - // if(proto.adapter != null) proto.adapter.recycle(); - // processor.recycle(); - - if (processor instanceof ActionHook) { - ((ActionHook) processor).action(ActionCode.ACTION_STOP, null); - } - } - return false; - } - } - - - // -------------------- JMX related methods -------------------- - - // * - protected String domain; - protected ObjectName oname; - protected MBeanServer mserver; - - public ObjectName getObjectName() { - return oname; - } - - public String getDomain() { - return domain; - } - - public ObjectName preRegister(MBeanServer server, - ObjectName name) throws Exception { - oname=name; - mserver=server; - domain=name.getDomain(); - return name; - } - - public void postRegister(Boolean registrationDone) { - } - - public void preDeregister() throws Exception { - } - - public void postDeregister() { - } -} +/* + * Copyright 1999-2006 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.coyote.http11; + +import java.net.InetAddress; +import java.net.Socket; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Iterator; +import java.util.concurrent.Executor; + +import javax.management.MBeanRegistration; +import javax.management.MBeanServer; +import javax.management.ObjectName; + +import org.apache.coyote.ActionCode; +import org.apache.coyote.ActionHook; +import org.apache.coyote.Adapter; +import org.apache.coyote.ProtocolHandler; +import org.apache.coyote.RequestGroupInfo; +import org.apache.coyote.RequestInfo; +import org.apache.tomcat.util.modeler.Registry; +import org.apache.tomcat.util.net.JIoEndpoint; +import org.apache.tomcat.util.net.SSLImplementation; +import org.apache.tomcat.util.net.ServerSocketFactory; +import org.apache.tomcat.util.net.JIoEndpoint.Handler; +import org.apache.tomcat.util.res.StringManager; + + +/** + * Abstract the protocol implementation, including threading, etc. + * Processor is single threaded and specific to stream-based protocols, + * will not fit Jk protocols like JNI. + * + * @author Remy Maucherat + * @author Costin Manolache + * @deprecated + */ +public class Http11Protocol + implements ProtocolHandler, MBeanRegistration { + + + protected static org.apache.commons.logging.Log log + = org.apache.commons.logging.LogFactory.getLog(Http11Protocol.class); + + /** + * The string manager for this package. + */ + protected static StringManager sm = + StringManager.getManager(Constants.Package); + + + // ------------------------------------------------------------ Constructor + + + public Http11Protocol() { + setSoLinger(Constants.DEFAULT_CONNECTION_LINGER); + setSoTimeout(Constants.DEFAULT_CONNECTION_TIMEOUT); + //setServerSoTimeout(Constants.DEFAULT_SERVER_SOCKET_TIMEOUT); + setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY); + } + + + // ----------------------------------------------------------------- Fields + + + protected Http11ConnectionHandler cHandler = new Http11ConnectionHandler(this); + protected JIoEndpoint endpoint = new JIoEndpoint(); + + + // * + protected ObjectName tpOname = null; + // * + protected ObjectName rgOname = null; + + + protected ServerSocketFactory socketFactory = null; + protected SSLImplementation sslImplementation = null; + + + // ----------------------------------------- ProtocolHandler Implementation + // * + + + protected HashMap<String, Object> attributes = new HashMap<String, Object>(); + + + /** + * Pass config info + */ + public void setAttribute(String name, Object value) { + if (log.isTraceEnabled()) { + log.trace(sm.getString("http11protocol.setattribute", name, value)); + } + attributes.put(name, value); + } + + public Object getAttribute(String key) { + return attributes.get(key); + } + + public Iterator getAttributeNames() { + return attributes.keySet().iterator(); + } + + + /** + * The adapter, used to call the connector. + */ + protected Adapter adapter; + public void setAdapter(Adapter adapter) { this.adapter = adapter; } + public Adapter getAdapter() { return adapter; } + + + public void init() throws Exception { + endpoint.setName(getName()); + endpoint.setHandler(cHandler); + + // Verify the validity of the configured socket factory + try { + if (secure) { + sslImplementation = + SSLImplementation.getInstance(sslImplementationName); + socketFactory = sslImplementation.getServerSocketFactory(); + endpoint.setServerSocketFactory(socketFactory); + } else if (socketFactoryName != null) { + socketFactory = (ServerSocketFactory) Class.forName(socketFactoryName).newInstance(); + endpoint.setServerSocketFactory(socketFactory); + } + } catch (Exception ex) { + log.error(sm.getString("http11protocol.socketfactory.initerror"), + ex); + throw ex; + } + + if (socketFactory!=null) { + Iterator<String> attE = attributes.keySet().iterator(); + while( attE.hasNext() ) { + String key = attE.next(); + Object v=attributes.get(key); + socketFactory.setAttribute(key, v); + } + } + + try { + endpoint.init(); + } catch (Exception ex) { + log.error(sm.getString("http11protocol.endpoint.initerror"), ex); + throw ex; + } + if (log.isInfoEnabled()) + log.info(sm.getString("http11protocol.init", getName())); + + } + + public void start() throws Exception { + if (this.domain != null) { + try { + tpOname = new ObjectName + (domain + ":" + "type=ThreadPool,name=" + getName()); + Registry.getRegistry(null, null) + .registerComponent(endpoint, tpOname, null ); + } catch (Exception e) { + log.error("Can't register endpoint"); + } + rgOname=new ObjectName + (domain + ":type=GlobalRequestProcessor,name=" + getName()); + Registry.getRegistry(null, null).registerComponent + ( cHandler.global, rgOname, null ); + } + + try { + endpoint.start(); + } catch (Exception ex) { + log.error(sm.getString("http11protocol.endpoint.starterror"), ex); + throw ex; + } + if (log.isInfoEnabled()) + log.info(sm.getString("http11protocol.start", getName())); + } + + public void pause() throws Exception { + try { + endpoint.pause(); + } catch (Exception ex) { + log.error(sm.getString("http11protocol.endpoint.pauseerror"), ex); + throw ex; + } + if (log.isInfoEnabled()) + log.info(sm.getString("http11protocol.pause", getName())); + } + + public void resume() throws Exception { + try { + endpoint.resume(); + } catch (Exception ex) { + log.error(sm.getString("http11protocol.endpoint.resumeerror"), ex); + throw ex; + } + if (log.isInfoEnabled()) + log.info(sm.getString("http11protocol.resume", getName())); + } + + public void destroy() throws Exception { + if (log.isInfoEnabled()) + log.info(sm.getString("http11protocol.stop", getName())); + endpoint.destroy(); + if (tpOname!=null) + Registry.getRegistry(null, null).unregisterComponent(tpOname); + if (rgOname != null) + Registry.getRegistry(null, null).unregisterComponent(rgOname); + } + + + // ------------------------------------------------------------- Properties + + + // * + /** + * This field indicates if the protocol is secure from the perspective of + * the client (= https is used). + */ + protected boolean secure; + public boolean getSecure() { return secure; } + public void setSecure(boolean b) { secure = b; } + + + /** + * Name of the socket factory. + */ + protected String socketFactoryName = null; + public String getSocketFactory() { return socketFactoryName; } + public void setSocketFactory(String valueS) { socketFactoryName = valueS; } + + + /** + * Name of the SSL implementation. + */ + protected String sslImplementationName=null; + public String getSSLImplementation() { return sslImplementationName; } + public void setSSLImplementation( String valueS) { + sslImplementationName = valueS; + setSecure(true); + } + + + // HTTP + /** + * Maximum number of requests which can be performed over a keepalive + * connection. The default is the same as for Apache HTTP Server. + */ + protected int maxKeepAliveRequests = 100; + public int getMaxKeepAliveRequests() { return maxKeepAliveRequests; } + public void setMaxKeepAliveRequests(int mkar) { maxKeepAliveRequests = mkar; } + + + // HTTP + /** + * This timeout represents the socket timeout which will be used while + * the adapter execution is in progress, unless disableUploadTimeout + * is set to true. The default is the same as for Apache HTTP Server + * (300 000 milliseconds). + */ + protected int timeout = 300000; + public int getTimeout() { return timeout; } + public void setTimeout(int timeout) { this.timeout = timeout; } + + + // * + /** + * Maximum size of the post which will be saved when processing certain + * requests, such as a POST. + */ + protected int maxSavePostSize = 4 * 1024; + public int getMaxSavePostSize() { return maxSavePostSize; } + public void setMaxSavePostSize(int valueI) { maxSavePostSize = valueI; } + + + // HTTP + /** + * Maximum size of the HTTP message header. + */ + protected int maxHttpHeaderSize = 8 * 1024; + public int getMaxHttpHeaderSize() { return maxHttpHeaderSize; } + public void setMaxHttpHeaderSize(int valueI) { maxHttpHeaderSize = valueI; } + + + // HTTP + /** + * If true, the regular socket timeout will be used for the full duration + * of the connection. + */ + protected boolean disableUploadTimeout = true; + public boolean getDisableUploadTimeout() { return disableUploadTimeout; } + public void setDisableUploadTimeout(boolean isDisabled) { disableUploadTimeout = isDisabled; } + + + // HTTP + /** + * Integrated compression support. + */ + protected String compression = "off"; + public String getCompression() { return compression; } + public void setCompression(String valueS) { compression = valueS; } + + + // HTTP + protected String noCompressionUserAgents = null; + public String getNoCompressionUserAgents() { return noCompressionUserAgents; } + public void setNoCompressionUserAgents(String valueS) { noCompressionUserAgents = valueS; } + + + // HTTP + protected String compressableMimeTypes = "text/html,text/xml,text/plain"; + public String getCompressableMimeType() { return compressableMimeTypes; } + public void setCompressableMimeType(String valueS) { compressableMimeTypes = valueS; } + + + // HTTP + protected int compressionMinSize = 2048; + public int getCompressionMinSize() { return compressionMinSize; } + public void setCompressionMinSize(int valueI) { compressionMinSize = valueI; } + + + // HTTP + /** + * User agents regular expressions which should be restricted to HTTP/1.0 support. + */ + protected String restrictedUserAgents = null; + public String getRestrictedUserAgents() { return restrictedUserAgents; } + public void setRestrictedUserAgents(String valueS) { restrictedUserAgents = valueS; } + + + // HTTP + /** + * Server header. + */ + protected String server; + public void setServer( String server ) { this.server = server; } + public String getServer() { return server; } + + + // --------------------------------------------------------- Public methods + + // * + public Executor getExecutor() { + return endpoint.getExecutor(); + } + + // * + public void setExecutor(Executor executor) { + endpoint.setExecutor(executor); + } + + // * + public int getMaxThreads() { + return endpoint.getMaxThreads(); + } + + // * + public void setMaxThreads( int maxThreads ) { + endpoint.setMaxThreads(maxThreads); + } + + // * + public void setThreadPriority(int threadPriority) { + endpoint.setThreadPriority(threadPriority); + } + + // * + public int getThreadPriority() { + return endpoint.getThreadPriority(); + } + + // * + public int getBacklog() { + return endpoint.getBacklog(); + } + + // * + public void setBacklog( int i ) { + endpoint.setBacklog(i); + } + + // * + public int getPort() { + return endpoint.getPort(); + } + + // * + public void setPort( int port ) { + endpoint.setPort(port); + } + + // * + public InetAddress getAddress() { + return endpoint.getAddress(); + } + + // * + public void setAddress(InetAddress ia) { + endpoint.setAddress( ia ); + } + + // * + public String getName() { + String encodedAddr = ""; + if (getAddress() != null) { + encodedAddr = "" + getAddress(); + if (encodedAddr.startsWith("/")) + encodedAddr = encodedAddr.substring(1); + encodedAddr = URLEncoder.encode(encodedAddr) + "-"; + } + return ("http-" + encodedAddr + endpoint.getPort()); + } + + // * + public boolean getTcpNoDelay() { + return endpoint.getTcpNoDelay(); + } + + // * + public void setTcpNoDelay( boolean b ) { + endpoint.setTcpNoDelay( b ); + } + + // * + public int getSoLinger() { + return endpoint.getSoLinger(); + } + + // * + public void setSoLinger( int i ) { + endpoint.setSoLinger( i ); + } + + // * + public int getSoTimeout() { + return endpoint.getSoTimeout(); + } + + // * + public void setSoTimeout( int i ) { + endpoint.setSoTimeout(i); + } + + // HTTP + /** + * Return the Keep-Alive policy for the connection. + */ + public boolean getKeepAlive() { + return ((maxKeepAliveRequests != 0) && (maxKeepAliveRequests != 1)); + } + + // HTTP + /** + * Set the keep-alive policy for this connection. + */ + public void setKeepAlive(boolean keepAlive) { + if (!keepAlive) { + setMaxKeepAliveRequests(1); + } + } + + /* + * Note: All the following are JSSE/java.io specific attributes. + */ + + public String getKeystore() { + return (String) getAttribute("keystore"); + } + + public void setKeystore( String k ) { + setAttribute("keystore", k); + } + + public String getKeypass() { + return (String) getAttribute("keypass"); + } + + public void setKeypass( String k ) { + attributes.put("keypass", k); + //setAttribute("keypass", k); + } + + public String getKeytype() { + return (String) getAttribute("keystoreType"); + } + + public void setKeytype( String k ) { + setAttribute("keystoreType", k); + } + + public String getClientauth() { + return (String) getAttribute("clientauth"); + } + + public void setClientauth( String k ) { + setAttribute("clientauth", k); + } + + public String getProtocols() { + return (String) getAttribute("protocols"); + } + + public void setProtocols(String k) { + setAttribute("protocols", k); + } + + public String getAlgorithm() { + return (String) getAttribute("algorithm"); + } + + public void setAlgorithm( String k ) { + setAttribute("algorithm", k); + } + + public String getCiphers() { + return (String) getAttribute("ciphers"); + } + + public void setCiphers(String ciphers) { + setAttribute("ciphers", ciphers); + } + + public String getKeyAlias() { + return (String) getAttribute("keyAlias"); + } + + public void setKeyAlias(String keyAlias) { + setAttribute("keyAlias", keyAlias); + } + + // ----------------------------------- Http11ConnectionHandler Inner Class + + protected static class Http11ConnectionHandler implements Handler { + protected Http11Protocol protocol; + protected static int count = 0; + protected RequestGroupInfo global = new RequestGroupInfo(); + protected ThreadLocal<Http11Processor> localProcessor = new ThreadLocal<Http11Processor>(); + + Http11ConnectionHandler(Http11Protocol proto) { + this.protocol = proto; + } + + public boolean process(Socket socket) { + Http11Processor processor = null; + try { + processor = localProcessor.get(); + if (processor == null) { + processor = + new Http11Processor(protocol.maxHttpHeaderSize, protocol.endpoint); + processor.setAdapter(protocol.adapter); + processor.setMaxKeepAliveRequests(protocol.maxKeepAliveRequests); + processor.setTimeout(protocol.timeout); + processor.setDisableUploadTimeout(protocol.disableUploadTimeout); + processor.setCompression(protocol.compression); + processor.setCompressionMinSize(protocol.compressionMinSize); + processor.setNoCompressionUserAgents(protocol.noCompressionUserAgents); + processor.setCompressableMimeTypes(protocol.compressableMimeTypes); + processor.setRestrictedUserAgents(protocol.restrictedUserAgents); + processor.setMaxSavePostSize(protocol.maxSavePostSize); + processor.setServer(protocol.server); + localProcessor.set(processor); + if (protocol.getDomain() != null) { + synchronized (this) { + try { + RequestInfo rp = processor.getRequest().getRequestProcessor(); + rp.setGlobalProcessor(global); + ObjectName rpName = new ObjectName + (protocol.getDomain() + ":type=RequestProcessor,worker=" + + protocol.getName() + ",name=HttpRequest" + count++); + Registry.getRegistry(null, null).registerComponent(rp, rpName, null); + } catch (Exception e) { + log.warn("Error registering request"); + } + } + } + } + + if (processor instanceof ActionHook) { + ((ActionHook) processor).action(ActionCode.ACTION_START, null); + } + + if (protocol.secure && (protocol.sslImplementation != null)) { + processor.setSSLSupport + (protocol.sslImplementation.getSSLSupport(socket)); + } else { + processor.setSSLSupport(null); + } + + processor.process(socket); + return false; + + } catch(java.net.SocketException e) { + // SocketExceptions are normal + Http11Protocol.log.debug + (sm.getString + ("http11protocol.proto.socketexception.debug"), e); + } catch (java.io.IOException e) { + // IOExceptions are normal + Http11Protocol.log.debug + (sm.getString + ("http11protocol.proto.ioexception.debug"), e); + } + // Future developers: if you discover any other + // rare-but-nonfatal exceptions, catch them here, and log as + // above. + catch (Throwable e) { + // any other exception or error is odd. Here we log it + // with "ERROR" level, so it will show up even on + // less-than-verbose logs. + Http11Protocol.log.error + (sm.getString("http11protocol.proto.error"), e); + } finally { + // if(proto.adapter != null) proto.adapter.recycle(); + // processor.recycle(); + + if (processor instanceof ActionHook) { + ((ActionHook) processor).action(ActionCode.ACTION_STOP, null); + } + } + return false; + } + } + + + // -------------------- JMX related methods -------------------- + + // * + protected String domain; + protected ObjectName oname; + protected MBeanServer mserver; + + public ObjectName getObjectName() { + return oname; + } + + public String getDomain() { + return domain; + } + + public ObjectName preRegister(MBeanServer server, + ObjectName name) throws Exception { + oname=name; + mserver=server; + domain=name.getDomain(); + return name; + } + + public void postRegister(Boolean registrationDone) { + } + + public void preDeregister() throws Exception { + } + + public void postDeregister() { + } +} Propchange: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java ------------------------------------------------------------------------------ svn:eol-style = native --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]