Author: markt Date: Fri Aug 12 08:38:22 2016 New Revision: 1756127 URL: http://svn.apache.org/viewvc?rev=1756127&view=rev Log: Pull up action()
Modified: tomcat/tc8.5.x/trunk/ (props changed) tomcat/tc8.5.x/trunk/java/org/apache/coyote/AbstractProcessor.java tomcat/tc8.5.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java tomcat/tc8.5.x/trunk/java/org/apache/coyote/http11/Http11Processor.java tomcat/tc8.5.x/trunk/java/org/apache/coyote/http2/StreamProcessor.java Propchange: tomcat/tc8.5.x/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Aug 12 08:38:22 2016 @@ -1 +1 @@ -/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489,1736646,1736703,1736836,1736849,1737104-1737105,1737112,1737117,1737119-1737120,1737155,1737157,1737192,1737280,1737339,1737632,1737664,1737715,1737748,1737785,1737834,1737860,1737903,1737959,1738005,1738007,1738014-1738015,1738018,1738022,1738039,1738043,1738059-1738060,1738147,1738149,1738174-1738175,1738261,1738589,1738623-1738625,1738643,1738816,1738850,1738855,1738946-1738948,1738953-1738954,1738979,1738982,1739079-1739081,1739087,1739113,1739153,1739172,1739176,1739191,1739474,1739726,1739762,1739775,1739814,1739817-1739818,1739975,1740131,1740324,1740465,1740495,1740508-1740509,1740520,1740535,1740707,1740803,1740810,1740969,1740980,1740991,1740997,1741015,1741033,1741036,1741058,1741060,1741080,1741147,1741159,1741164,1741173,1741181,1741190,1741197,1741202,1741208,1741213,1741221,1741225,1741232,1741409,1741501 ,1741677,1741892,1741896,1741984,1742023,1742042,1742071,1742090,1742093,1742101,1742105,1742111,1742139,1742146,1742148,1742166,1742181,1742184,1742187,1742246,1742248-1742251,1742263-1742264,1742268,1742276,1742369,1742387,1742448,1742509-1742512,1742917,1742919,1742933,1742975-1742976,1742984,1742986,1743019,1743115,1743117,1743124-1743125,1743134,1743425,1743554,1743679,1743696-1743698,1743700-1743701,1744058,1744064-1744065,1744125,1744194,1744229,1744270,1744323,1744432,1744684,1744697,1744705,1744713,1744760,1744786,1745083,1745142-1745143,1745145,1745177,1745179-1745180,1745227,1745248,1745254,1745337,1745467,1745473,1745576,1745735,1745744,1746304,1746306-1746307,1746319,1746327,1746338,1746340-1746341,1746344,1746427,1746441,1746473,1746490,1746492,1746495-1746496,1746499-1746501,1746503-1746507,1746509,1746549,1746551,1746554,1746556,1746558,1746584,1746620,1746649,1746724,1746939,1746989,1747014,1747028,1747035,1747210,1747225,1747234,1747253,1747404,1747506,1747536,1747 924,1747980,1747993,1748001,1748253,1748452,1748547,1748629,1748676,1748715,1749287,1749296,1749328,1749373,1749465,1749506,1749508,1749665-1749666,1749763,1749865-1749866,1749898,1749978,1749980,1750011,1750015,1750056,1750480,1750617,1750634,1750692,1750697,1750700,1750703,1750707,1750714,1750718,1750723,1750774,1750899,1750975,1750995,1751061,1751097,1751173,1751438,1751447,1751463,1751702,1752212,1752737,1752745,1753078,1753080,1753358,1753363,1754111,1754140-1754141,1754281,1754310,1754445,1754467,1754494,1754496,1754528,1754532-1754533,1754613,1754714,1754874,1754941,1754944,1754950-1754951,1755005,1755007,1755009,1755132,1755180-1755181,1755185,1755190,1755204-1755206,1755208,1755214,1755224,1755227,1755230,1755629,1755646-1755647,1755650,1755653,1755675,1755680,1755683,1755693,1755717,1755731-1755737,1755812,1755828,1755884,1755890,1755918-1755919,1755942,1755958,1755960,1755970,1755993,1756013,1756019,1756039,1756056,1756083-1756105 +/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489,1736646,1736703,1736836,1736849,1737104-1737105,1737112,1737117,1737119-1737120,1737155,1737157,1737192,1737280,1737339,1737632,1737664,1737715,1737748,1737785,1737834,1737860,1737903,1737959,1738005,1738007,1738014-1738015,1738018,1738022,1738039,1738043,1738059-1738060,1738147,1738149,1738174-1738175,1738261,1738589,1738623-1738625,1738643,1738816,1738850,1738855,1738946-1738948,1738953-1738954,1738979,1738982,1739079-1739081,1739087,1739113,1739153,1739172,1739176,1739191,1739474,1739726,1739762,1739775,1739814,1739817-1739818,1739975,1740131,1740324,1740465,1740495,1740508-1740509,1740520,1740535,1740707,1740803,1740810,1740969,1740980,1740991,1740997,1741015,1741033,1741036,1741058,1741060,1741080,1741147,1741159,1741164,1741173,1741181,1741190,1741197,1741202,1741208,1741213,1741221,1741225,1741232,1741409,1741501 ,1741677,1741892,1741896,1741984,1742023,1742042,1742071,1742090,1742093,1742101,1742105,1742111,1742139,1742146,1742148,1742166,1742181,1742184,1742187,1742246,1742248-1742251,1742263-1742264,1742268,1742276,1742369,1742387,1742448,1742509-1742512,1742917,1742919,1742933,1742975-1742976,1742984,1742986,1743019,1743115,1743117,1743124-1743125,1743134,1743425,1743554,1743679,1743696-1743698,1743700-1743701,1744058,1744064-1744065,1744125,1744194,1744229,1744270,1744323,1744432,1744684,1744697,1744705,1744713,1744760,1744786,1745083,1745142-1745143,1745145,1745177,1745179-1745180,1745227,1745248,1745254,1745337,1745467,1745473,1745576,1745735,1745744,1746304,1746306-1746307,1746319,1746327,1746338,1746340-1746341,1746344,1746427,1746441,1746473,1746490,1746492,1746495-1746496,1746499-1746501,1746503-1746507,1746509,1746549,1746551,1746554,1746556,1746558,1746584,1746620,1746649,1746724,1746939,1746989,1747014,1747028,1747035,1747210,1747225,1747234,1747253,1747404,1747506,1747536,1747 924,1747980,1747993,1748001,1748253,1748452,1748547,1748629,1748676,1748715,1749287,1749296,1749328,1749373,1749465,1749506,1749508,1749665-1749666,1749763,1749865-1749866,1749898,1749978,1749980,1750011,1750015,1750056,1750480,1750617,1750634,1750692,1750697,1750700,1750703,1750707,1750714,1750718,1750723,1750774,1750899,1750975,1750995,1751061,1751097,1751173,1751438,1751447,1751463,1751702,1752212,1752737,1752745,1753078,1753080,1753358,1753363,1754111,1754140-1754141,1754281,1754310,1754445,1754467,1754494,1754496,1754528,1754532-1754533,1754613,1754714,1754874,1754941,1754944,1754950-1754951,1755005,1755007,1755009,1755132,1755180-1755181,1755185,1755190,1755204-1755206,1755208,1755214,1755224,1755227,1755230,1755629,1755646-1755647,1755650,1755653,1755675,1755680,1755683,1755693,1755717,1755731-1755737,1755812,1755828,1755884,1755890,1755918-1755919,1755942,1755958,1755960,1755970,1755993,1756013,1756019,1756039,1756056,1756083-1756106 Modified: tomcat/tc8.5.x/trunk/java/org/apache/coyote/AbstractProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/coyote/AbstractProcessor.java?rev=1756127&r1=1756126&r2=1756127&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/coyote/AbstractProcessor.java (original) +++ tomcat/tc8.5.x/trunk/java/org/apache/coyote/AbstractProcessor.java Fri Aug 12 08:38:22 2016 @@ -19,11 +19,14 @@ package org.apache.coyote; import java.io.IOException; import java.io.InterruptedIOException; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicBoolean; import javax.servlet.RequestDispatcher; import org.apache.tomcat.util.ExceptionUtils; +import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.net.AbstractEndpoint; +import org.apache.tomcat.util.net.DispatchType; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; import org.apache.tomcat.util.net.SSLSupport; import org.apache.tomcat.util.net.SocketEvent; @@ -246,6 +249,245 @@ public abstract class AbstractProcessor } + @Override + public final void action(ActionCode actionCode, Object param) { + switch (actionCode) { + // 'Normal' servlet support + case COMMIT: { + if (!response.isCommitted()) { + try { + // Validate and write response headers + prepareResponse(); + } catch (IOException e) { + setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e); + } + } + break; + } + case CLOSE: { + action(ActionCode.COMMIT, null); + try { + finishResponse(); + } catch (IOException e) { + setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e); + } + break; + } + case ACK: { + ack(); + break; + } + case CLIENT_FLUSH: { + action(ActionCode.COMMIT, null); + try { + flush(); + } catch (IOException e) { + setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e); + response.setErrorException(e); + } + break; + } + case AVAILABLE: { + request.setAvailable(available(Boolean.TRUE.equals(param))); + break; + } + case REQ_SET_BODY_REPLAY: { + ByteChunk body = (ByteChunk) param; + setRequestBody(body); + break; + } + + // Error handling + case IS_ERROR: { + ((AtomicBoolean) param).set(getErrorState().isError()); + break; + } + case CLOSE_NOW: { + // Prevent further writes to the response + setSwallowResponse(); + setErrorState(ErrorState.CLOSE_NOW, null); + break; + } + case DISABLE_SWALLOW_INPUT: { + // Aborted upload or similar. + // No point reading the remainder of the request. + disableSwallowRequest(); + // This is an error state. Make sure it is marked as such. + setErrorState(ErrorState.CLOSE_CLEAN, null); + break; + } + + // Request attribute support + case REQ_HOST_ADDR_ATTRIBUTE: { + if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { + request.remoteAddr().setString(socketWrapper.getRemoteAddr()); + } + break; + } + case REQ_HOST_ATTRIBUTE: { + populateRequestAttributeRemoteHost(); + break; + } + case REQ_LOCALPORT_ATTRIBUTE: { + if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { + request.setLocalPort(socketWrapper.getLocalPort()); + } + break; + } + case REQ_LOCAL_ADDR_ATTRIBUTE: { + if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { + request.localAddr().setString(socketWrapper.getLocalAddr()); + } + break; + } + case REQ_LOCAL_NAME_ATTRIBUTE: { + if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { + request.localName().setString(socketWrapper.getLocalName()); + } + break; + } + case REQ_REMOTEPORT_ATTRIBUTE: { + if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { + request.setRemotePort(socketWrapper.getRemotePort()); + } + break; + } + + // SSL request attribute support + case REQ_SSL_ATTRIBUTE: { + populateSslRequestAttributes(); + break; + } + case REQ_SSL_CERTIFICATE: { + sslReHandShake(); + break; + } + + // Servlet 3.0 asynchronous support + case ASYNC_START: { + asyncStateMachine.asyncStart((AsyncContextCallback) param); + break; + } + case ASYNC_COMPLETE: { + clearDispatches(); + if (asyncStateMachine.asyncComplete()) { + socketWrapper.processSocket(SocketEvent.OPEN_READ, true); + } + break; + } + case ASYNC_DISPATCH: { + if (asyncStateMachine.asyncDispatch()) { + socketWrapper.processSocket(SocketEvent.OPEN_READ, true); + } + break; + } + case ASYNC_DISPATCHED: { + asyncStateMachine.asyncDispatched(); + break; + } + case ASYNC_ERROR: { + asyncStateMachine.asyncError(); + break; + } + case ASYNC_IS_ASYNC: { + ((AtomicBoolean) param).set(asyncStateMachine.isAsync()); + break; + } + case ASYNC_IS_COMPLETING: { + ((AtomicBoolean) param).set(asyncStateMachine.isCompleting()); + break; + } + case ASYNC_IS_DISPATCHING: { + ((AtomicBoolean) param).set(asyncStateMachine.isAsyncDispatching()); + break; + } + case ASYNC_IS_ERROR: { + ((AtomicBoolean) param).set(asyncStateMachine.isAsyncError()); + break; + } + case ASYNC_IS_STARTED: { + ((AtomicBoolean) param).set(asyncStateMachine.isAsyncStarted()); + break; + } + case ASYNC_IS_TIMINGOUT: { + ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut()); + break; + } + case ASYNC_RUN: { + asyncStateMachine.asyncRun((Runnable) param); + break; + } + case ASYNC_SETTIMEOUT: { + if (param == null) { + return; + } + long timeout = ((Long) param).longValue(); + setAsyncTimeout(timeout); + break; + } + case ASYNC_TIMEOUT: { + AtomicBoolean result = (AtomicBoolean) param; + result.set(asyncStateMachine.asyncTimeout()); + break; + } + case ASYNC_POST_PROCESS: { + asyncStateMachine.asyncPostProcess(); + break; + } + + // Servlet 3.1 non-blocking I/O + case REQUEST_BODY_FULLY_READ: { + AtomicBoolean result = (AtomicBoolean) param; + result.set(isRequestBodyFullyRead()); + break; + } + case NB_READ_INTEREST: { + if (!isRequestBodyFullyRead()) { + registerReadInterest(); + } + break; + } + case NB_WRITE_INTEREST: { + AtomicBoolean isReady = (AtomicBoolean)param; + isReady.set(isReady()); + break; + } + case DISPATCH_READ: { + addDispatch(DispatchType.NON_BLOCKING_READ); + break; + } + case DISPATCH_WRITE: { + addDispatch(DispatchType.NON_BLOCKING_WRITE); + break; + } + case DISPATCH_EXECUTE: { + SocketWrapperBase<?> wrapper = socketWrapper; + if (wrapper != null) { + executeDispatches(wrapper); + } + break; + } + + // Servlet 3.1 HTTP Upgrade + case UPGRADE: { + doHttpUpgrade((UpgradeToken) param); + break; + } + + // Servlet 4.0 Push requests + case IS_PUSH_SUPPORTED: { + AtomicBoolean result = (AtomicBoolean) param; + result.set(isPushSupported()); + break; + } + case PUSH_REQUEST: { + doPush((PushToken) param); + break; + } + } + } + + /** * Perform any necessary processing for a non-blocking read before * dispatching to the adapter. @@ -305,6 +547,63 @@ public abstract class AbstractProcessor } + protected abstract void prepareResponse() throws IOException; + + + protected abstract void finishResponse() throws IOException; + + + protected abstract void ack(); + + + protected abstract void flush() throws IOException; + + + protected abstract int available(boolean doRead); + + + protected abstract void setRequestBody(ByteChunk body); + + + protected abstract void setSwallowResponse(); + + + protected abstract void disableSwallowRequest(); + + + protected abstract boolean getPopulateRequestAttributesFromSocket(); + + + protected abstract void populateRequestAttributeRemoteHost(); + + + protected abstract void populateSslRequestAttributes(); + + + protected abstract void sslReHandShake() ; + + + protected abstract boolean isRequestBodyFullyRead(); + + + protected abstract void registerReadInterest(); + + + protected abstract boolean isReady(); + + + protected abstract void executeDispatches(SocketWrapperBase<?> wrapper); + + + protected abstract void doHttpUpgrade(UpgradeToken upgradeToken); + + + protected abstract boolean isPushSupported(); + + + protected abstract void doPush(PushToken pushToken); + + /** * Flush any pending writes. Used during non-blocking writes to flush any * remaining data from a previous incomplete write. Modified: tomcat/tc8.5.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1756127&r1=1756126&r2=1756127&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original) +++ tomcat/tc8.5.x/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Fri Aug 12 08:38:22 2016 @@ -25,13 +25,11 @@ import java.nio.ByteBuffer; import java.security.NoSuchProviderException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; -import java.util.concurrent.atomic.AtomicBoolean; import javax.servlet.http.HttpServletResponse; import org.apache.coyote.AbstractProcessor; import org.apache.coyote.ActionCode; -import org.apache.coyote.AsyncContextCallback; import org.apache.coyote.ErrorState; import org.apache.coyote.InputBuffer; import org.apache.coyote.OutputBuffer; @@ -47,9 +45,7 @@ import org.apache.tomcat.util.buf.Messag import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.net.AbstractEndpoint; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; -import org.apache.tomcat.util.net.DispatchType; import org.apache.tomcat.util.net.SSLSupport; -import org.apache.tomcat.util.net.SocketEvent; import org.apache.tomcat.util.net.SocketWrapperBase; import org.apache.tomcat.util.res.StringManager; @@ -355,245 +351,6 @@ public class AjpProcessor extends Abstra // --------------------------------------------------------- Public Methods @Override - public final void action(ActionCode actionCode, Object param) { - switch (actionCode) { - // 'Normal' servlet support - case COMMIT: { - if (!response.isCommitted()) { - try { - // Validate and write response headers - prepareResponse(); - } catch (IOException e) { - setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e); - } - } - break; - } - case CLOSE: { - action(ActionCode.COMMIT, null); - try { - finishResponse(); - } catch (IOException e) { - setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e); - } - break; - } - case ACK: { - ack(); - break; - } - case CLIENT_FLUSH: { - action(ActionCode.COMMIT, null); - try { - flush(); - } catch (IOException e) { - setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e); - response.setErrorException(e); - } - break; - } - case AVAILABLE: { - request.setAvailable(available(Boolean.TRUE.equals(param))); - break; - } - case REQ_SET_BODY_REPLAY: { - ByteChunk body = (ByteChunk) param; - setRequestBody(body); - break; - } - - // Error handling - case IS_ERROR: { - ((AtomicBoolean) param).set(getErrorState().isError()); - break; - } - case CLOSE_NOW: { - // Prevent further writes to the response - setSwallowResponse(); - setErrorState(ErrorState.CLOSE_NOW, null); - break; - } - case DISABLE_SWALLOW_INPUT: { - // Aborted upload or similar. - // No point reading the remainder of the request. - disableSwallowRequest(); - // This is an error state. Make sure it is marked as such. - setErrorState(ErrorState.CLOSE_CLEAN, null); - break; - } - - // Request attribute support - case REQ_HOST_ADDR_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.remoteAddr().setString(socketWrapper.getRemoteAddr()); - } - break; - } - case REQ_HOST_ATTRIBUTE: { - populateRequestAttributeRemoteHost(); - break; - } - case REQ_LOCALPORT_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.setLocalPort(socketWrapper.getLocalPort()); - } - break; - } - case REQ_LOCAL_ADDR_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.localAddr().setString(socketWrapper.getLocalAddr()); - } - break; - } - case REQ_LOCAL_NAME_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.localName().setString(socketWrapper.getLocalName()); - } - break; - } - case REQ_REMOTEPORT_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.setRemotePort(socketWrapper.getRemotePort()); - } - break; - } - - // SSL request attribute support - case REQ_SSL_ATTRIBUTE: { - populateSslRequestAttributes(); - break; - } - case REQ_SSL_CERTIFICATE: { - sslReHandShake(); - break; - } - - // Servlet 3.0 asynchronous support - case ASYNC_START: { - asyncStateMachine.asyncStart((AsyncContextCallback) param); - break; - } - case ASYNC_COMPLETE: { - clearDispatches(); - if (asyncStateMachine.asyncComplete()) { - socketWrapper.processSocket(SocketEvent.OPEN_READ, true); - } - break; - } - case ASYNC_DISPATCH: { - if (asyncStateMachine.asyncDispatch()) { - socketWrapper.processSocket(SocketEvent.OPEN_READ, true); - } - break; - } - case ASYNC_DISPATCHED: { - asyncStateMachine.asyncDispatched(); - break; - } - case ASYNC_ERROR: { - asyncStateMachine.asyncError(); - break; - } - case ASYNC_IS_ASYNC: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsync()); - break; - } - case ASYNC_IS_COMPLETING: { - ((AtomicBoolean) param).set(asyncStateMachine.isCompleting()); - break; - } - case ASYNC_IS_DISPATCHING: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncDispatching()); - break; - } - case ASYNC_IS_ERROR: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncError()); - break; - } - case ASYNC_IS_STARTED: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncStarted()); - break; - } - case ASYNC_IS_TIMINGOUT: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut()); - break; - } - case ASYNC_RUN: { - asyncStateMachine.asyncRun((Runnable) param); - break; - } - case ASYNC_SETTIMEOUT: { - if (param == null) { - return; - } - long timeout = ((Long) param).longValue(); - setAsyncTimeout(timeout); - break; - } - case ASYNC_TIMEOUT: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(asyncStateMachine.asyncTimeout()); - break; - } - case ASYNC_POST_PROCESS: { - asyncStateMachine.asyncPostProcess(); - break; - } - - // Servlet 3.1 non-blocking I/O - case REQUEST_BODY_FULLY_READ: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(isRequestBodyFullyRead()); - break; - } - case NB_READ_INTEREST: { - if (!isRequestBodyFullyRead()) { - registerReadInterest(); - } - break; - } - case NB_WRITE_INTEREST: { - AtomicBoolean isReady = (AtomicBoolean)param; - isReady.set(isReady()); - break; - } - case DISPATCH_READ: { - addDispatch(DispatchType.NON_BLOCKING_READ); - break; - } - case DISPATCH_WRITE: { - addDispatch(DispatchType.NON_BLOCKING_WRITE); - break; - } - case DISPATCH_EXECUTE: { - SocketWrapperBase<?> wrapper = socketWrapper; - if (wrapper != null) { - executeDispatches(wrapper); - } - break; - } - - // Servlet 3.1 HTTP Upgrade - case UPGRADE: { - doHttpUpgrade((UpgradeToken) param); - break; - } - - // Servlet 4.0 Push requests - case IS_PUSH_SUPPORTED: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(isPushSupported()); - break; - } - case PUSH_REQUEST: { - doPush((PushToken) param); - break; - } - } - } - - - @Override protected boolean flushBufferedWrite() throws IOException { if (hasDataToWrite()) { socketWrapper.flush(false); @@ -1274,7 +1031,8 @@ public class AjpProcessor extends Abstra * When committing the response, we have to validate the set of headers, as * well as setup the response filters. */ - private void prepareResponse() throws IOException { + @Override + protected final void prepareResponse() throws IOException { response.setCommitted(true); @@ -1348,7 +1106,8 @@ public class AjpProcessor extends Abstra /** * Callback to write data from the buffer. */ - private void flush() throws IOException { + @Override + protected final void flush() throws IOException { // Calling code should ensure that there is no data in the buffers for // non-blocking writes. // TODO Validate the assertion above @@ -1365,7 +1124,8 @@ public class AjpProcessor extends Abstra /** * Finish AJP response. */ - private void finishResponse() throws IOException { + @Override + protected final void finishResponse() throws IOException { if (responseFinished) return; @@ -1386,12 +1146,14 @@ public class AjpProcessor extends Abstra } - private void ack() { + @Override + protected final void ack() { // NO-OP for AJP } - private int available(boolean doRead) { + @Override + protected final int available(boolean doRead) { if (endOfStream) { return 0; } @@ -1413,7 +1175,8 @@ public class AjpProcessor extends Abstra } - private void setRequestBody(ByteChunk body) { + @Override + protected final void setRequestBody(ByteChunk body) { int length = body.getLength(); bodyBytes.setBytes(body.getBytes(), body.getStart(), length); request.setContentLength(length); @@ -1424,12 +1187,14 @@ public class AjpProcessor extends Abstra } - private void setSwallowResponse() { + @Override + protected final void setSwallowResponse() { swallowResponse = true; } - private void disableSwallowRequest() { + @Override + protected final void disableSwallowRequest() { /* NO-OP * With AJP, Tomcat controls when the client sends request body data. At * most there will be a single packet to read and that will be handled @@ -1438,14 +1203,16 @@ public class AjpProcessor extends Abstra } - private boolean getPopulateRequestAttributesFromSocket() { + @Override + protected final boolean getPopulateRequestAttributesFromSocket() { // NO-OPs the attribute requests since they are pre-populated when // parsing the first AJP message. return false; } - private void populateRequestAttributeRemoteHost() { + @Override + protected final void populateRequestAttributeRemoteHost() { // Get remote host name using a DNS resolution if (request.remoteHost().isNull()) { try { @@ -1458,7 +1225,8 @@ public class AjpProcessor extends Abstra } - private void populateSslRequestAttributes() { + @Override + protected final void populateSslRequestAttributes() { if (!certificates.isNull()) { ByteChunk certData = certificates.getByteChunk(); X509Certificate jsseCerts[] = null; @@ -1501,28 +1269,33 @@ public class AjpProcessor extends Abstra } - private void sslReHandShake() { + @Override + protected final void sslReHandShake() { // NO-OP. Can't force a new SSL handshake with the client when using // AJP as the reverse proxy controls that connection. } - private boolean isRequestBodyFullyRead() { + @Override + protected final boolean isRequestBodyFullyRead() { return endOfStream; } - private void registerReadInterest() { + @Override + protected final void registerReadInterest() { socketWrapper.registerReadInterest(); } - private boolean isReady() { + @Override + protected final boolean isReady() { return responseMsgPos == -1 && socketWrapper.isReadyForWrite(); } - private void executeDispatches(SocketWrapperBase<?> wrapper) { + @Override + protected final void executeDispatches(SocketWrapperBase<?> wrapper) { wrapper.executeNonBlockingDispatches(getIteratorAndClearDispatches()); } @@ -1530,14 +1303,16 @@ public class AjpProcessor extends Abstra /** * @param upgradeToken Unused. */ - private void doHttpUpgrade(UpgradeToken upgradeToken) { + @Override + protected final void doHttpUpgrade(UpgradeToken upgradeToken) { // HTTP connections only. Unsupported for AJP. throw new UnsupportedOperationException( sm.getString("ajpprocessor.httpupgrade.notsupported")); } - private boolean isPushSupported() { + @Override + protected final boolean isPushSupported() { // HTTP2 connections only. Unsupported for AJP. return false; } @@ -1546,7 +1321,8 @@ public class AjpProcessor extends Abstra /** * @param pushToken Unused */ - private void doPush(PushToken pushToken) { + @Override + protected final void doPush(PushToken pushToken) { // HTTP2 connections only. Unsupported for AJP. throw new UnsupportedOperationException( sm.getString("ajpprocessor.pushrequest.notsupported")); Modified: tomcat/tc8.5.x/trunk/java/org/apache/coyote/http11/Http11Processor.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1756127&r1=1756126&r2=1756127&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/coyote/http11/Http11Processor.java (original) +++ tomcat/tc8.5.x/trunk/java/org/apache/coyote/http11/Http11Processor.java Fri Aug 12 08:38:22 2016 @@ -23,14 +23,12 @@ import java.util.Enumeration; import java.util.Locale; import java.util.Map; import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Pattern; import javax.servlet.http.HttpServletResponse; import org.apache.coyote.AbstractProcessor; import org.apache.coyote.ActionCode; -import org.apache.coyote.AsyncContextCallback; import org.apache.coyote.ErrorState; import org.apache.coyote.PushToken; import org.apache.coyote.Request; @@ -59,10 +57,8 @@ import org.apache.tomcat.util.http.MimeH import org.apache.tomcat.util.log.UserDataHelper; import org.apache.tomcat.util.net.AbstractEndpoint; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; -import org.apache.tomcat.util.net.DispatchType; import org.apache.tomcat.util.net.SSLSupport; import org.apache.tomcat.util.net.SendfileDataBase; -import org.apache.tomcat.util.net.SocketEvent; import org.apache.tomcat.util.net.SocketWrapperBase; import org.apache.tomcat.util.res.StringManager; @@ -648,245 +644,6 @@ public class Http11Processor extends Abs @Override - public final void action(ActionCode actionCode, Object param) { - switch (actionCode) { - // 'Normal' servlet support - case COMMIT: { - if (!response.isCommitted()) { - try { - // Validate and write response headers - prepareResponse(); - } catch (IOException e) { - setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e); - } - } - break; - } - case CLOSE: { - action(ActionCode.COMMIT, null); - try { - finishResponse(); - } catch (IOException e) { - setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e); - } - break; - } - case ACK: { - ack(); - break; - } - case CLIENT_FLUSH: { - action(ActionCode.COMMIT, null); - try { - flush(); - } catch (IOException e) { - setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e); - response.setErrorException(e); - } - break; - } - case AVAILABLE: { - request.setAvailable(available(Boolean.TRUE.equals(param))); - break; - } - case REQ_SET_BODY_REPLAY: { - ByteChunk body = (ByteChunk) param; - setRequestBody(body); - break; - } - - // Error handling - case IS_ERROR: { - ((AtomicBoolean) param).set(getErrorState().isError()); - break; - } - case CLOSE_NOW: { - // Prevent further writes to the response - setSwallowResponse(); - setErrorState(ErrorState.CLOSE_NOW, null); - break; - } - case DISABLE_SWALLOW_INPUT: { - // Aborted upload or similar. - // No point reading the remainder of the request. - disableSwallowRequest(); - // This is an error state. Make sure it is marked as such. - setErrorState(ErrorState.CLOSE_CLEAN, null); - break; - } - - // Request attribute support - case REQ_HOST_ADDR_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.remoteAddr().setString(socketWrapper.getRemoteAddr()); - } - break; - } - case REQ_HOST_ATTRIBUTE: { - populateRequestAttributeRemoteHost(); - break; - } - case REQ_LOCALPORT_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.setLocalPort(socketWrapper.getLocalPort()); - } - break; - } - case REQ_LOCAL_ADDR_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.localAddr().setString(socketWrapper.getLocalAddr()); - } - break; - } - case REQ_LOCAL_NAME_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.localName().setString(socketWrapper.getLocalName()); - } - break; - } - case REQ_REMOTEPORT_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.setRemotePort(socketWrapper.getRemotePort()); - } - break; - } - - // SSL request attribute support - case REQ_SSL_ATTRIBUTE: { - populateSslRequestAttributes(); - break; - } - case REQ_SSL_CERTIFICATE: { - sslReHandShake(); - break; - } - - // Servlet 3.0 asynchronous support - case ASYNC_START: { - asyncStateMachine.asyncStart((AsyncContextCallback) param); - break; - } - case ASYNC_COMPLETE: { - clearDispatches(); - if (asyncStateMachine.asyncComplete()) { - socketWrapper.processSocket(SocketEvent.OPEN_READ, true); - } - break; - } - case ASYNC_DISPATCH: { - if (asyncStateMachine.asyncDispatch()) { - socketWrapper.processSocket(SocketEvent.OPEN_READ, true); - } - break; - } - case ASYNC_DISPATCHED: { - asyncStateMachine.asyncDispatched(); - break; - } - case ASYNC_ERROR: { - asyncStateMachine.asyncError(); - break; - } - case ASYNC_IS_ASYNC: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsync()); - break; - } - case ASYNC_IS_COMPLETING: { - ((AtomicBoolean) param).set(asyncStateMachine.isCompleting()); - break; - } - case ASYNC_IS_DISPATCHING: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncDispatching()); - break; - } - case ASYNC_IS_ERROR: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncError()); - break; - } - case ASYNC_IS_STARTED: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncStarted()); - break; - } - case ASYNC_IS_TIMINGOUT: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut()); - break; - } - case ASYNC_RUN: { - asyncStateMachine.asyncRun((Runnable) param); - break; - } - case ASYNC_SETTIMEOUT: { - if (param == null) { - return; - } - long timeout = ((Long) param).longValue(); - setAsyncTimeout(timeout); - break; - } - case ASYNC_TIMEOUT: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(asyncStateMachine.asyncTimeout()); - break; - } - case ASYNC_POST_PROCESS: { - asyncStateMachine.asyncPostProcess(); - break; - } - - // Servlet 3.1 non-blocking I/O - case REQUEST_BODY_FULLY_READ: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(isRequestBodyFullyRead()); - break; - } - case NB_READ_INTEREST: { - if (!isRequestBodyFullyRead()) { - registerReadInterest(); - } - break; - } - case NB_WRITE_INTEREST: { - AtomicBoolean isReady = (AtomicBoolean)param; - isReady.set(isReady()); - break; - } - case DISPATCH_READ: { - addDispatch(DispatchType.NON_BLOCKING_READ); - break; - } - case DISPATCH_WRITE: { - addDispatch(DispatchType.NON_BLOCKING_WRITE); - break; - } - case DISPATCH_EXECUTE: { - SocketWrapperBase<?> wrapper = socketWrapper; - if (wrapper != null) { - executeDispatches(wrapper); - } - break; - } - - // Servlet 3.1 HTTP Upgrade - case UPGRADE: { - doHttpUpgrade((UpgradeToken) param); - break; - } - - // Servlet 4.0 Push requests - case IS_PUSH_SUPPORTED: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(isPushSupported()); - break; - } - case PUSH_REQUEST: { - doPush((PushToken) param); - break; - } - } - } - - - @Override public SocketState service(SocketWrapperBase<?> socketWrapper) throws IOException { RequestInfo rp = request.getRequestProcessor(); @@ -1356,7 +1113,8 @@ public class Http11Processor extends Abs * When committing the response, we have to validate the set of headers, as * well as setup the response filters. */ - private void prepareResponse() throws IOException { + @Override + protected final void prepareResponse() throws IOException { boolean entityBody = true; contentDelimitation = false; @@ -1723,12 +1481,14 @@ public class Http11Processor extends Abs } - private void finishResponse() throws IOException { + @Override + protected final void finishResponse() throws IOException { outputBuffer.finishResponse(); } - private void ack() { + @Override + protected final void ack() { // Acknowledge request // Send a 100 status back if it makes sense (response not committed // yet, and client specified an expectation for 100-continue) @@ -1743,17 +1503,20 @@ public class Http11Processor extends Abs } - private void flush() throws IOException { + @Override + protected final void flush() throws IOException { outputBuffer.flush(); } - private int available(boolean doRead) { + @Override + protected final int available(boolean doRead) { return inputBuffer.available(doRead); } - private void setRequestBody(ByteChunk body) { + @Override + protected final void setRequestBody(ByteChunk body) { InputFilter savedBody = new SavedRequestInputFilter(body); savedBody.setRequest(request); @@ -1762,29 +1525,34 @@ public class Http11Processor extends Abs } - private void setSwallowResponse() { + @Override + protected final void setSwallowResponse() { outputBuffer.responseFinished = true; } - private void disableSwallowRequest() { + @Override + protected final void disableSwallowRequest() { inputBuffer.setSwallowInput(false); } - private boolean getPopulateRequestAttributesFromSocket() { + @Override + protected final boolean getPopulateRequestAttributesFromSocket() { return true; } - private void populateRequestAttributeRemoteHost() { + @Override + protected final void populateRequestAttributeRemoteHost() { if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { request.remoteHost().setString(socketWrapper.getRemoteHost()); } } - private void populateSslRequestAttributes() { + @Override + protected final void populateSslRequestAttributes() { try { if (sslSupport != null) { Object sslO = sslSupport.getCipherSuite(); @@ -1815,7 +1583,8 @@ public class Http11Processor extends Abs } - private void sslReHandShake() { + @Override + protected final void sslReHandShake() { if (sslSupport != null) { // Consume and buffer the request body, so that it does not // interfere with the client's handshake messages @@ -1837,43 +1606,47 @@ public class Http11Processor extends Abs } - private boolean isRequestBodyFullyRead() { + @Override + protected final boolean isRequestBodyFullyRead() { return inputBuffer.isFinished(); } - private void registerReadInterest() { + @Override + protected final void registerReadInterest() { socketWrapper.registerReadInterest(); } - private boolean isReady() { + @Override + protected final boolean isReady() { return outputBuffer.isReady(); } - private void executeDispatches(SocketWrapperBase<?> wrapper) { + @Override + protected final void executeDispatches(SocketWrapperBase<?> wrapper) { wrapper.executeNonBlockingDispatches(getIteratorAndClearDispatches()); } - private void doHttpUpgrade(UpgradeToken upgradeToken) { + @Override + protected final void doHttpUpgrade(UpgradeToken upgradeToken) { this.upgradeToken = upgradeToken; // Stop further HTTP output outputBuffer.responseFinished = true; } - private boolean isPushSupported() { + @Override + protected final boolean isPushSupported() { // HTTP2 connections only. Unsupported for HTTP/1.x return false; } - /** - * @param pushToken Unused - */ - private void doPush(PushToken pushToken) { + @Override + protected final void doPush(PushToken pushToken) { // HTTP2 connections only. Unsupported for AJP. throw new UnsupportedOperationException( sm.getString("http11processor.pushrequest.notsupported")); Modified: tomcat/tc8.5.x/trunk/java/org/apache/coyote/http2/StreamProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/coyote/http2/StreamProcessor.java?rev=1756127&r1=1756126&r2=1756127&view=diff ============================================================================== --- tomcat/tc8.5.x/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original) +++ tomcat/tc8.5.x/trunk/java/org/apache/coyote/http2/StreamProcessor.java Fri Aug 12 08:38:22 2016 @@ -18,12 +18,10 @@ package org.apache.coyote.http2; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.concurrent.atomic.AtomicBoolean; import org.apache.coyote.AbstractProcessor; import org.apache.coyote.ActionCode; import org.apache.coyote.Adapter; -import org.apache.coyote.AsyncContextCallback; import org.apache.coyote.ContainerThreadMarker; import org.apache.coyote.ErrorState; import org.apache.coyote.PushToken; @@ -32,7 +30,6 @@ import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; -import org.apache.tomcat.util.net.DispatchType; import org.apache.tomcat.util.net.SSLSupport; import org.apache.tomcat.util.net.SocketEvent; import org.apache.tomcat.util.net.SocketWrapperBase; @@ -101,256 +98,20 @@ public class StreamProcessor extends Abs @Override - public void action(ActionCode actionCode, Object param) { - switch (actionCode) { - // 'Normal' servlet support - case COMMIT: { - if (!response.isCommitted()) { - try { - // Validate and write response headers - prepareResponse(); - } catch (IOException ioe) { - setErrorState(ErrorState.CLOSE_CONNECTION_NOW, ioe); - } - } - break; - } - case CLOSE: { - action(ActionCode.COMMIT, null); - try { - finishResponse(); - } catch (IOException ioe) { - setErrorState(ErrorState.CLOSE_CONNECTION_NOW, ioe); - } - break; - } - case ACK: { - ack(); - break; - } - case CLIENT_FLUSH: { - action(ActionCode.COMMIT, null); - try { - flush(); - } catch (IOException ioe) { - setErrorState(ErrorState.CLOSE_CONNECTION_NOW, ioe); - response.setErrorException(ioe); - } - break; - } - case AVAILABLE: { - request.setAvailable(available(Boolean.TRUE.equals(param))); - break; - } - case REQ_SET_BODY_REPLAY: { - ByteChunk body = (ByteChunk) param; - setRequestBody(body); - break; - } - - // Error handling - case IS_ERROR: { - ((AtomicBoolean) param).set(getErrorState().isError()); - break; - } - case CLOSE_NOW: { - // Prevent further writes to the response - setSwallowResponse(); - setErrorState(ErrorState.CLOSE_NOW, null); - break; - } - case DISABLE_SWALLOW_INPUT: { - // Aborted upload or similar. - // No point reading the remainder of the request. - disableSwallowRequest(); - // This is an error state. Make sure it is marked as such. - setErrorState(ErrorState.CLOSE_CLEAN, null); - break; - } - - // Request attribute support - case REQ_HOST_ADDR_ATTRIBUTE: { - populateRequestAttributeRemoteHost(); - break; - } - case REQ_HOST_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.remoteHost().setString(socketWrapper.getRemoteHost()); - } - break; - } - case REQ_LOCALPORT_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.setLocalPort(socketWrapper.getLocalPort()); - } - break; - } - case REQ_LOCAL_ADDR_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.localAddr().setString(socketWrapper.getLocalAddr()); - } - break; - } - case REQ_LOCAL_NAME_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.localName().setString(socketWrapper.getLocalName()); - } - break; - } - case REQ_REMOTEPORT_ATTRIBUTE: { - if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { - request.setRemotePort(socketWrapper.getRemotePort()); - } - break; - } - - // SSL request attribute support - case REQ_SSL_ATTRIBUTE: { - populateSslRequestAttributes(); - break; - } - case REQ_SSL_CERTIFICATE: { - sslReHandShake(); - break; - } - - // Servlet 3.0 asynchronous support - case ASYNC_START: { - asyncStateMachine.asyncStart((AsyncContextCallback) param); - break; - } - case ASYNC_COMPLETE: { - clearDispatches(); - if (asyncStateMachine.asyncComplete()) { - socketWrapper.getEndpoint().getExecutor().execute(this); - } - break; - } - case ASYNC_DISPATCH: { - if (asyncStateMachine.asyncDispatch()) { - socketWrapper.getEndpoint().getExecutor().execute(this); - } - break; - } - case ASYNC_DISPATCHED: { - asyncStateMachine.asyncDispatched(); - break; - } - case ASYNC_ERROR: { - asyncStateMachine.asyncError(); - break; - } - case ASYNC_IS_ASYNC: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsync()); - break; - } - case ASYNC_IS_COMPLETING: { - ((AtomicBoolean) param).set(asyncStateMachine.isCompleting()); - break; - } - case ASYNC_IS_DISPATCHING: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncDispatching()); - break; - } - case ASYNC_IS_ERROR: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncError()); - break; - } - case ASYNC_IS_STARTED: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncStarted()); - break; - } - case ASYNC_IS_TIMINGOUT: { - ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut()); - break; - } - case ASYNC_RUN: { - asyncStateMachine.asyncRun((Runnable) param); - break; - } - case ASYNC_SETTIMEOUT: { - if (param == null) { - return; - } - long timeout = ((Long) param).longValue(); - setAsyncTimeout(timeout); - break; - } - case ASYNC_TIMEOUT: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(asyncStateMachine.asyncTimeout()); - break; - } - case ASYNC_POST_PROCESS: { - asyncStateMachine.asyncPostProcess(); - break; - } - - // Servlet 3.1 non-blocking I/O - case REQUEST_BODY_FULLY_READ: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(isRequestBodyFullyRead()); - break; - } - case NB_READ_INTEREST: { - if (!isRequestBodyFullyRead()) { - registerReadInterest(); - } - break; - } - case NB_WRITE_INTEREST: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(isReady()); - break; - } - case DISPATCH_READ: { - addDispatch(DispatchType.NON_BLOCKING_READ); - break; - } - case DISPATCH_WRITE: { - addDispatch(DispatchType.NON_BLOCKING_WRITE); - break; - } - case DISPATCH_EXECUTE: { - SocketWrapperBase<?> wrapper = socketWrapper; - if (wrapper != null) { - executeDispatches(wrapper); - } - break; - } - - // Servlet 3.1 HTTP Upgrade - case UPGRADE: { - doHttpUpgrade((UpgradeToken) param); - break; - } - - // Servlet 4.0 Push requests - case IS_PUSH_SUPPORTED: { - AtomicBoolean result = (AtomicBoolean) param; - result.set(isPushSupported()); - break; - } - case PUSH_REQUEST: { - doPush((PushToken) param); - break; - } - } - } - - - private void prepareResponse() throws IOException { + protected final void prepareResponse() throws IOException { response.setCommitted(true); stream.writeHeaders(); } - private void finishResponse() throws IOException { + @Override + protected final void finishResponse() throws IOException { stream.getOutputBuffer().close(); } - private void ack() { + @Override + protected final void ack() { if (!response.isCommitted() && request.hasExpectation()) { try { stream.writeAck(); @@ -361,50 +122,55 @@ public class StreamProcessor extends Abs } - private void flush() throws IOException { + @Override + protected final void flush() throws IOException { stream.flushData(); } - /** - * @param doRead Unused for HTTP/2 - */ - private int available(boolean doRead) { + @Override + protected final int available(boolean doRead) { return stream.getInputBuffer().available(); } - private void setRequestBody(ByteChunk body) { + @Override + protected final void setRequestBody(ByteChunk body) { stream.getInputBuffer().insertReplayedBody(body); stream.receivedEndOfStream(); } - private void setSwallowResponse() { + @Override + protected final void setSwallowResponse() { // NO-OP } - private void disableSwallowRequest() { + @Override + protected final void disableSwallowRequest() { // NO-OP // HTTP/2 has to swallow any input received to ensure that the flow // control windows are correctly tracked. } - private boolean getPopulateRequestAttributesFromSocket() { + @Override + protected final boolean getPopulateRequestAttributesFromSocket() { return true; } - private void populateRequestAttributeRemoteHost() { + @Override + protected final void populateRequestAttributeRemoteHost() { if (getPopulateRequestAttributesFromSocket() && socketWrapper != null) { request.remoteHost().setString(socketWrapper.getRemoteHost()); } } - private void populateSslRequestAttributes() { + @Override + protected final void populateSslRequestAttributes() { try { if (sslSupport != null) { Object sslO = sslSupport.getCipherSuite(); @@ -435,47 +201,52 @@ public class StreamProcessor extends Abs } - private void sslReHandShake() { + @Override + protected final void sslReHandShake() { // No re-negotiation support in HTTP/2. } - private boolean isRequestBodyFullyRead() { + @Override + protected final boolean isRequestBodyFullyRead() { return stream.getInputBuffer().isRequestBodyFullyRead(); } - private void registerReadInterest() { + @Override + protected final void registerReadInterest() { stream.getInputBuffer().registerReadInterest(); } - private boolean isReady() { + @Override + protected final boolean isReady() { return stream.getOutputBuffer().isReady(); } - private void executeDispatches(SocketWrapperBase<?> wrapper) { + @Override + protected final void executeDispatches(SocketWrapperBase<?> wrapper) { wrapper.getEndpoint().getExecutor().execute(this); } - /** - * @param upgradeToken Unused - */ - private void doHttpUpgrade(UpgradeToken upgradeToken) { + @Override + protected final void doHttpUpgrade(UpgradeToken upgradeToken) { // Unsupported / illegal under HTTP/2 throw new UnsupportedOperationException( sm.getString("streamProcessor.httpupgrade.notsupported")); } - private boolean isPushSupported() { + @Override + protected final boolean isPushSupported() { return stream.isPushSupported(); } - private void doPush(PushToken pushToken) { + @Override + protected final void doPush(PushToken pushToken) { try { pushToken.setResult(stream.push(pushToken.getPushTarget())); } catch (IOException ioe) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org