📄 http11aprprotocol.java
字号:
}
public void setNoCompressionUserAgents(String valueS) {
noCompressionUserAgents = valueS;
setAttribute("noCompressionUserAgents", valueS);
}
public String getCompressableMimeType() {
return compressableMimeTypes;
}
public void setCompressableMimeType(String valueS) {
compressableMimeTypes = valueS;
setAttribute("compressableMimeTypes", valueS);
}
public int getCompressionMinSize() {
return compressionMinSize;
}
public void setCompressionMinSize(int valueI) {
compressionMinSize = valueI;
setAttribute("compressionMinSize", "" + valueI);
}
public int getSoLinger() {
return ep.getSoLinger();
}
public void setSoLinger( int i ) {
ep.setSoLinger( i );
setAttribute("soLinger", "" + i);
}
public int getSoTimeout() {
return ep.getSoTimeout();
}
public void setSoTimeout( int i ) {
ep.setSoTimeout(i);
setAttribute("soTimeout", "" + i);
}
public String getProtocol() {
return getProperty("protocol");
}
public void setProtocol( String k ) {
setSecure(true);
setAttribute("protocol", k);
}
public boolean getSecure() {
return secure;
}
public void setSecure( boolean b ) {
secure=b;
setAttribute("secure", "" + b);
}
public int getMaxKeepAliveRequests() {
return maxKeepAliveRequests;
}
/** Set the maximum number of Keep-Alive requests that we will honor.
*/
public void setMaxKeepAliveRequests(int mkar) {
maxKeepAliveRequests = mkar;
setAttribute("maxKeepAliveRequests", "" + mkar);
}
/**
* The number of seconds Tomcat will wait for a subsequent request
* before closing the connection.
*/
public int getKeepAliveTimeout() {
return ep.getKeepAliveTimeout();
}
public void setKeepAliveTimeout(int timeout) {
ep.setKeepAliveTimeout(timeout);
}
public boolean getKeepAlive() {
return ((maxKeepAliveRequests != 0) && (maxKeepAliveRequests != 1));
}
/**
* Set the keep-alive policy for this connection.
*/
public void setKeepAlive(boolean keepAlive) {
if (!keepAlive) {
setMaxKeepAliveRequests(1);
}
}
public int getSocketCloseDelay() {
return socketCloseDelay;
}
public void setSocketCloseDelay( int d ) {
socketCloseDelay=d;
setAttribute("socketCloseDelay", "" + d);
}
public void setServer( String server ) {
this.server = server;
}
public String getServer() {
return server;
}
public int getTimeout() {
return timeout;
}
public void setTimeout( int timeouts ) {
timeout = timeouts;
setAttribute("timeout", "" + timeouts);
}
// -------------------- SSL related properties --------------------
/**
* SSL engine.
*/
public boolean isSSLEnabled() { return ep.isSSLEnabled(); }
public void setSSLEnabled(boolean SSLEnabled) { ep.setSSLEnabled(SSLEnabled); }
/**
* SSL protocol.
*/
public String getSSLProtocol() { return ep.getSSLProtocol(); }
public void setSSLProtocol(String SSLProtocol) { ep.setSSLProtocol(SSLProtocol); }
/**
* SSL password (if a cert is encrypted, and no password has been provided, a callback
* will ask for a password).
*/
public String getSSLPassword() { return ep.getSSLPassword(); }
public void setSSLPassword(String SSLPassword) { ep.setSSLPassword(SSLPassword); }
/**
* SSL cipher suite.
*/
public String getSSLCipherSuite() { return ep.getSSLCipherSuite(); }
public void setSSLCipherSuite(String SSLCipherSuite) { ep.setSSLCipherSuite(SSLCipherSuite); }
/**
* SSL certificate file.
*/
public String getSSLCertificateFile() { return ep.getSSLCertificateFile(); }
public void setSSLCertificateFile(String SSLCertificateFile) { ep.setSSLCertificateFile(SSLCertificateFile); }
/**
* SSL certificate key file.
*/
public String getSSLCertificateKeyFile() { return ep.getSSLCertificateKeyFile(); }
public void setSSLCertificateKeyFile(String SSLCertificateKeyFile) { ep.setSSLCertificateKeyFile(SSLCertificateKeyFile); }
/**
* SSL certificate chain file.
*/
public String getSSLCertificateChainFile() { return ep.getSSLCertificateChainFile(); }
public void setSSLCertificateChainFile(String SSLCertificateChainFile) { ep.setSSLCertificateChainFile(SSLCertificateChainFile); }
/**
* SSL CA certificate path.
*/
public String getSSLCACertificatePath() { return ep.getSSLCACertificatePath(); }
public void setSSLCACertificatePath(String SSLCACertificatePath) { ep.setSSLCACertificatePath(SSLCACertificatePath); }
/**
* SSL CA certificate file.
*/
public String getSSLCACertificateFile() { return ep.getSSLCACertificateFile(); }
public void setSSLCACertificateFile(String SSLCACertificateFile) { ep.setSSLCACertificateFile(SSLCACertificateFile); }
/**
* SSL CA revocation path.
*/
public String getSSLCARevocationPath() { return ep.getSSLCARevocationPath(); }
public void setSSLCARevocationPath(String SSLCARevocationPath) { ep.setSSLCARevocationPath(SSLCARevocationPath); }
/**
* SSL CA revocation file.
*/
public String getSSLCARevocationFile() { return ep.getSSLCARevocationFile(); }
public void setSSLCARevocationFile(String SSLCARevocationFile) { ep.setSSLCARevocationFile(SSLCARevocationFile); }
/**
* SSL verify client.
*/
public String getSSLVerifyClient() { return ep.getSSLVerifyClient(); }
public void setSSLVerifyClient(String SSLVerifyClient) { ep.setSSLVerifyClient(SSLVerifyClient); }
/**
* SSL verify depth.
*/
public int getSSLVerifyDepth() { return ep.getSSLVerifyDepth(); }
public void setSSLVerifyDepth(int SSLVerifyDepth) { ep.setSSLVerifyDepth(SSLVerifyDepth); }
// -------------------- Connection handler --------------------
static class Http11ConnectionHandler implements Handler {
protected Http11AprProtocol proto;
protected static int count = 0;
protected RequestGroupInfo global = new RequestGroupInfo();
protected ThreadLocal<Http11AprProcessor> localProcessor =
new ThreadLocal<Http11AprProcessor>();
protected ConcurrentHashMap<Long, Http11AprProcessor> connections =
new ConcurrentHashMap<Long, Http11AprProcessor>();
protected java.util.Stack<Http11AprProcessor> recycledProcessors =
new java.util.Stack<Http11AprProcessor>();
Http11ConnectionHandler(Http11AprProtocol proto) {
this.proto = proto;
}
public SocketState event(long socket, SocketStatus status) {
Http11AprProcessor result = connections.get(socket);
SocketState state = SocketState.CLOSED;
if (result != null) {
// Call the appropriate event
try {
state = result.event(status);
} catch (java.net.SocketException e) {
// SocketExceptions are normal
Http11AprProtocol.log.debug
(sm.getString
("http11protocol.proto.socketexception.debug"), e);
} catch (java.io.IOException e) {
// IOExceptions are normal
Http11AprProtocol.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.
Http11AprProtocol.log.error
(sm.getString("http11protocol.proto.error"), e);
} finally {
if (state != SocketState.LONG) {
connections.remove(socket);
recycledProcessors.push(result);
}
}
}
return state;
}
public SocketState process(long socket) {
Http11AprProcessor processor = null;
try {
processor = (Http11AprProcessor) localProcessor.get();
if (processor == null) {
synchronized (recycledProcessors) {
if (!recycledProcessors.isEmpty()) {
processor = recycledProcessors.pop();
localProcessor.set(processor);
}
}
}
if (processor == null) {
processor =
new Http11AprProcessor(proto.maxHttpHeaderSize, proto.ep);
processor.setAdapter(proto.adapter);
processor.setMaxKeepAliveRequests(proto.maxKeepAliveRequests);
processor.setTimeout(proto.timeout);
processor.setDisableUploadTimeout(proto.disableUploadTimeout);
processor.setCompression(proto.compression);
processor.setCompressionMinSize(proto.compressionMinSize);
processor.setNoCompressionUserAgents(proto.noCompressionUserAgents);
processor.setCompressableMimeTypes(proto.compressableMimeTypes);
processor.setRestrictedUserAgents(proto.restrictedUserAgents);
processor.setSocketBuffer(proto.socketBuffer);
processor.setMaxSavePostSize(proto.maxSavePostSize);
processor.setServer(proto.server);
localProcessor.set(processor);
if (proto.getDomain() != null) {
synchronized (this) {
try {
RequestInfo rp = processor.getRequest().getRequestProcessor();
rp.setGlobalProcessor(global);
ObjectName rpName = new ObjectName
(proto.getDomain() + ":type=RequestProcessor,worker="
+ proto.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);
}
SocketState state = processor.process(socket);
if (state == SocketState.LONG) {
// Associate the connection with the processor. The next request
// processed by this thread will use either a new or a recycled
// processor.
connections.put(socket, processor);
localProcessor.set(null);
proto.ep.getCometPoller().add(socket);
}
return state;
} catch (java.net.SocketException e) {
// SocketExceptions are normal
Http11AprProtocol.log.debug
(sm.getString
("http11protocol.proto.socketexception.debug"), e);
} catch (java.io.IOException e) {
// IOExceptions are normal
Http11AprProtocol.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.
Http11AprProtocol.log.error
(sm.getString("http11protocol.proto.error"), e);
}
return SocketState.CLOSED;
}
}
protected static org.apache.juli.logging.Log log
= org.apache.juli.logging.LogFactory.getLog(Http11AprProtocol.class);
// -------------------- Various implementation classes --------------------
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() {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -