You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2006/07/18 17:16:39 UTC
svn commit: r423110 -
/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java
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: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org