This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 7.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 0ef94cefaa6ae86791806e83d5f6161786231803 Author: Mark Thomas <ma...@apache.org> AuthorDate: Sun Jun 30 23:53:57 2019 +0100 Align with 8.5.x --- .../tomcat/websocket/AsyncChannelGroupUtil.java | 2 +- .../websocket/AsyncChannelWrapperSecure.java | 27 ++++----- .../tomcat/websocket/BackgroundProcessManager.java | 2 +- java/org/apache/tomcat/websocket/Constants.java | 14 +++-- .../tomcat/websocket/FutureToSendHandler.java | 2 +- .../apache/tomcat/websocket/PerMessageDeflate.java | 2 +- .../apache/tomcat/websocket/Transformation.java | 9 +++ .../tomcat/websocket/TransformationFactory.java | 2 +- java/org/apache/tomcat/websocket/Util.java | 3 +- java/org/apache/tomcat/websocket/WsFrameBase.java | 70 +++++++++------------- .../org/apache/tomcat/websocket/WsFrameClient.java | 22 +++---- 11 files changed, 72 insertions(+), 83 deletions(-) diff --git a/java/org/apache/tomcat/websocket/AsyncChannelGroupUtil.java b/java/org/apache/tomcat/websocket/AsyncChannelGroupUtil.java index 0e81011..fe0136e 100644 --- a/java/org/apache/tomcat/websocket/AsyncChannelGroupUtil.java +++ b/java/org/apache/tomcat/websocket/AsyncChannelGroupUtil.java @@ -37,7 +37,7 @@ import org.apache.tomcat.util.threads.ThreadPoolExecutor; public class AsyncChannelGroupUtil { private static final StringManager sm = - StringManager.getManager(Constants.PACKAGE_NAME); + StringManager.getManager(AsyncChannelGroupUtil.class); private static AsynchronousChannelGroup group = null; private static int usageCount = 0; diff --git a/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java b/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java index 0f0f038..c5eac9f 100644 --- a/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java +++ b/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java @@ -51,7 +51,7 @@ public class AsyncChannelWrapperSecure implements AsyncChannelWrapper { private final Log log = LogFactory.getLog(AsyncChannelWrapperSecure.class); private static final StringManager sm = - StringManager.getManager(Constants.PACKAGE_NAME); + StringManager.getManager(AsyncChannelWrapperSecure.class); private static final ByteBuffer DUMMY = ByteBuffer.allocate(16921); private final AsynchronousSocketChannel socketChannel; @@ -268,8 +268,7 @@ public class AsyncChannelWrapperSecure implements AsyncChannelWrapper { Future<Integer> f = socketChannel.read(socketReadBuffer); Integer socketRead = f.get(); if (socketRead.intValue() == -1) { - throw new EOFException(sm.getString( - "asyncChannelWrapperSecure.eof")); + throw new EOFException(sm.getString("asyncChannelWrapperSecure.eof")); } } @@ -277,8 +276,7 @@ public class AsyncChannelWrapperSecure implements AsyncChannelWrapper { if (socketReadBuffer.hasRemaining()) { // Decrypt the data in the buffer - SSLEngineResult r = - sslEngine.unwrap(socketReadBuffer, dest); + SSLEngineResult r = sslEngine.unwrap(socketReadBuffer, dest); read += r.bytesProduced(); Status s = r.getStatus(); @@ -405,17 +403,15 @@ public class AsyncChannelWrapperSecure implements AsyncChannelWrapper { handshaking = false; break; } - default: { - throw new SSLException("TODO"); + case NOT_HANDSHAKING: { + throw new SSLException( + sm.getString("asyncChannelWrapperSecure.notHandshaking")); } } } - } catch (SSLException e) { - hFuture.fail(e); - } catch (InterruptedException e) { - hFuture.fail(e); - } catch (ExecutionException e) { + } catch (Exception e) { hFuture.fail(e); + return; } hFuture.complete(null); @@ -429,13 +425,14 @@ public class AsyncChannelWrapperSecure implements AsyncChannelWrapper { if (resultStatus != Status.OK && (wrap || resultStatus != Status.BUFFER_UNDERFLOW)) { - throw new SSLException("TODO"); + throw new SSLException( + sm.getString("asyncChannelWrapperSecure.check.notOk", resultStatus)); } if (wrap && result.bytesConsumed() != 0) { - throw new SSLException("TODO"); + throw new SSLException(sm.getString("asyncChannelWrapperSecure.check.wrap")); } if (!wrap && result.bytesProduced() != 0) { - throw new SSLException("TODO"); + throw new SSLException(sm.getString("asyncChannelWrapperSecure.check.unwrap")); } } } diff --git a/java/org/apache/tomcat/websocket/BackgroundProcessManager.java b/java/org/apache/tomcat/websocket/BackgroundProcessManager.java index 8de6a55..53aed20 100644 --- a/java/org/apache/tomcat/websocket/BackgroundProcessManager.java +++ b/java/org/apache/tomcat/websocket/BackgroundProcessManager.java @@ -34,7 +34,7 @@ public class BackgroundProcessManager { private final Log log = LogFactory.getLog(BackgroundProcessManager.class); private static final StringManager sm = - StringManager.getManager(Constants.PACKAGE_NAME); + StringManager.getManager(BackgroundProcessManager.class); private static final BackgroundProcessManager instance; diff --git a/java/org/apache/tomcat/websocket/Constants.java b/java/org/apache/tomcat/websocket/Constants.java index 5a292f8..bdadbb6 100644 --- a/java/org/apache/tomcat/websocket/Constants.java +++ b/java/org/apache/tomcat/websocket/Constants.java @@ -27,8 +27,12 @@ import javax.websocket.Extension; */ public class Constants { - protected static final String PACKAGE_NAME = - Constants.class.getPackage().getName(); + /** + * @deprecated. Will be removed in 8.5.x onwards. + */ + @Deprecated + protected static final String PACKAGE_NAME = Constants.class.getPackage().getName(); + // OP Codes public static final byte OPCODE_CONTINUATION = 0x00; public static final byte OPCODE_TEXT = 0x01; @@ -67,10 +71,8 @@ public class Constants { public static final String WS_VERSION_HEADER_NAME = "Sec-WebSocket-Version"; public static final String WS_VERSION_HEADER_VALUE = "13"; public static final String WS_KEY_HEADER_NAME = "Sec-WebSocket-Key"; - public static final String WS_PROTOCOL_HEADER_NAME = - "Sec-WebSocket-Protocol"; - public static final String WS_EXTENSIONS_HEADER_NAME = - "Sec-WebSocket-Extensions"; + public static final String WS_PROTOCOL_HEADER_NAME = "Sec-WebSocket-Protocol"; + public static final String WS_EXTENSIONS_HEADER_NAME = "Sec-WebSocket-Extensions"; /// HTTP redirection status codes public static final int MULTIPLE_CHOICES = 300; diff --git a/java/org/apache/tomcat/websocket/FutureToSendHandler.java b/java/org/apache/tomcat/websocket/FutureToSendHandler.java index 62871aa..8c837fb 100644 --- a/java/org/apache/tomcat/websocket/FutureToSendHandler.java +++ b/java/org/apache/tomcat/websocket/FutureToSendHandler.java @@ -34,7 +34,7 @@ import org.apache.tomcat.util.res.StringManager; */ class FutureToSendHandler implements Future<Void>, SendHandler { - private static final StringManager sm = StringManager.getManager(Constants.PACKAGE_NAME); + private static final StringManager sm = StringManager.getManager(FutureToSendHandler.class); private final CountDownLatch latch = new CountDownLatch(1); private final WsSession wsSession; diff --git a/java/org/apache/tomcat/websocket/PerMessageDeflate.java b/java/org/apache/tomcat/websocket/PerMessageDeflate.java index 010f711..c4fe1c4 100644 --- a/java/org/apache/tomcat/websocket/PerMessageDeflate.java +++ b/java/org/apache/tomcat/websocket/PerMessageDeflate.java @@ -418,7 +418,7 @@ public class PerMessageDeflate implements Transformation { uncompressedIntermediateHandler, uncompressedIntermediateHandler); } } else { - throw new IllegalStateException("Should never happen"); + throw new IllegalStateException(sm.getString("perMessageDeflate.invalidState")); } // Add the newly created compressed part to the set of parts diff --git a/java/org/apache/tomcat/websocket/Transformation.java b/java/org/apache/tomcat/websocket/Transformation.java index e5d82de..5186181 100644 --- a/java/org/apache/tomcat/websocket/Transformation.java +++ b/java/org/apache/tomcat/websocket/Transformation.java @@ -30,6 +30,7 @@ public interface Transformation { /** * Sets the next transformation in the pipeline. + * @param t The next transformation */ void setNext(Transformation t); @@ -52,6 +53,9 @@ public interface Transformation { /** * Obtain the extension that describes the information to be returned to the * client. + * + * @return The extension information that describes the parameters that have + * been agreed for this transformation */ Extension getExtensionResponse(); @@ -63,6 +67,11 @@ public interface Transformation { * @param rsv The reserved bits for the frame currently being * processed * @param dest The buffer in which the data is to be written + * + * @return The result of trying to read more data from the transform + * + * @throws IOException If an I/O error occurs while reading data from the + * transform */ TransformationResult getMoreData(byte opCode, boolean fin, int rsv, ByteBuffer dest) throws IOException; diff --git a/java/org/apache/tomcat/websocket/TransformationFactory.java b/java/org/apache/tomcat/websocket/TransformationFactory.java index fed13f9..643be94 100644 --- a/java/org/apache/tomcat/websocket/TransformationFactory.java +++ b/java/org/apache/tomcat/websocket/TransformationFactory.java @@ -24,7 +24,7 @@ import org.apache.tomcat.util.res.StringManager; public class TransformationFactory { - private static final StringManager sm = StringManager.getManager(Constants.PACKAGE_NAME); + private static final StringManager sm = StringManager.getManager(TransformationFactory.class); private static final TransformationFactory factory = new TransformationFactory(); diff --git a/java/org/apache/tomcat/websocket/Util.java b/java/org/apache/tomcat/websocket/Util.java index 27ff24a..e935056 100644 --- a/java/org/apache/tomcat/websocket/Util.java +++ b/java/org/apache/tomcat/websocket/Util.java @@ -59,8 +59,7 @@ import org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeText; */ public class Util { - private static final StringManager sm = - StringManager.getManager(Constants.PACKAGE_NAME); + private static final StringManager sm = StringManager.getManager(Util.class); private static final Queue<SecureRandom> randoms = new ConcurrentLinkedQueue<SecureRandom>(); diff --git a/java/org/apache/tomcat/websocket/WsFrameBase.java b/java/org/apache/tomcat/websocket/WsFrameBase.java index ae6f8e8..b3d7261 100644 --- a/java/org/apache/tomcat/websocket/WsFrameBase.java +++ b/java/org/apache/tomcat/websocket/WsFrameBase.java @@ -42,8 +42,7 @@ import org.apache.tomcat.util.res.StringManager; */ public abstract class WsFrameBase { - private static final StringManager sm = - StringManager.getManager(Constants.PACKAGE_NAME); + private static final StringManager sm = StringManager.getManager(WsFrameBase.class); // Connection level attributes protected final WsSession wsSession; @@ -79,10 +78,10 @@ public abstract class WsFrameBase { private final byte[] mask = new byte[4]; private int maskIndex = 0; private long payloadLength = 0; - private long payloadWritten = 0; + private volatile long payloadWritten = 0; // Attributes tracking state - private State state = State.NEW_FRAME; + private volatile State state = State.NEW_FRAME; private volatile boolean open = true; private int readPos = 0; protected int writePos = 0; @@ -152,8 +151,7 @@ public abstract class WsFrameBase { if (!transformation.validateRsv(rsv, opCode)) { throw new WsIOException(new CloseReason( CloseCodes.PROTOCOL_ERROR, - sm.getString("wsFrame.wrongRsv", Integer.valueOf(rsv), - Integer.valueOf(opCode)))); + sm.getString("wsFrame.wrongRsv", Integer.valueOf(rsv), Integer.valueOf(opCode)))); } if (Util.isControl(opCode)) { @@ -167,8 +165,7 @@ public abstract class WsFrameBase { opCode != Constants.OPCODE_CLOSE) { throw new WsIOException(new CloseReason( CloseCodes.PROTOCOL_ERROR, - sm.getString("wsFrame.invalidOpCode", - Integer.valueOf(opCode)))); + sm.getString("wsFrame.invalidOpCode", Integer.valueOf(opCode)))); } } else { if (continuationExpected) { @@ -200,8 +197,7 @@ public abstract class WsFrameBase { } else { throw new WsIOException(new CloseReason( CloseCodes.PROTOCOL_ERROR, - sm.getString("wsFrame.invalidOpCode", - Integer.valueOf(opCode)))); + sm.getString("wsFrame.invalidOpCode", Integer.valueOf(opCode)))); } } catch (IllegalStateException ise) { // Thrown if the session is already closed @@ -321,7 +317,7 @@ public abstract class WsFrameBase { int code = CloseCodes.NORMAL_CLOSURE.getCode(); if (controlBufferBinary.remaining() == 1) { controlBufferBinary.clear(); - // Payload must be zero or greater than 2 + // Payload must be zero or 2+ bytes long throw new WsIOException(new CloseReason( CloseCodes.PROTOCOL_ERROR, sm.getString("wsFrame.oneByteCloseCode"))); @@ -329,8 +325,8 @@ public abstract class WsFrameBase { if (controlBufferBinary.remaining() > 1) { code = controlBufferBinary.getShort(); if (controlBufferBinary.remaining() > 0) { - CoderResult cr = utf8DecoderControl.decode( - controlBufferBinary, controlBufferText, true); + CoderResult cr = utf8DecoderControl.decode(controlBufferBinary, + controlBufferText, true); if (cr.isError()) { controlBufferBinary.clear(); controlBufferText.clear(); @@ -351,8 +347,7 @@ public abstract class WsFrameBase { wsSession.getBasicRemote().sendPong(controlBufferBinary); } } else if (opCode == Constants.OPCODE_PONG) { - MessageHandler.Whole<PongMessage> mhPong = - wsSession.getPongMessageHandler(); + MessageHandler.Whole<PongMessage> mhPong = wsSession.getPongMessageHandler(); if (mhPong != null) { try { mhPong.onMessage(new WsPongMessage(controlBufferBinary)); @@ -367,8 +362,7 @@ public abstract class WsFrameBase { controlBufferBinary.clear(); throw new WsIOException(new CloseReason( CloseCodes.PROTOCOL_ERROR, - sm.getString("wsFrame.invalidOpCode", - Integer.valueOf(opCode)))); + sm.getString("wsFrame.invalidOpCode", Integer.valueOf(opCode)))); } controlBufferBinary.clear(); newFrame(); @@ -379,10 +373,8 @@ public abstract class WsFrameBase { @SuppressWarnings("unchecked") private void sendMessageText(boolean last) throws WsIOException { if (textMsgHandler instanceof WrappedMessageHandler) { - long maxMessageSize = - ((WrappedMessageHandler) textMsgHandler).getMaxMessageSize(); - if (maxMessageSize > -1 && - messageBufferText.remaining() > maxMessageSize) { + long maxMessageSize = ((WrappedMessageHandler) textMsgHandler).getMaxMessageSize(); + if (maxMessageSize > -1 && messageBufferText.remaining() > maxMessageSize) { throw new WsIOException(new CloseReason(CloseCodes.TOO_BIG, sm.getString("wsFrame.messageTooBig", Long.valueOf(messageBufferText.remaining()), @@ -392,12 +384,12 @@ public abstract class WsFrameBase { try { if (textMsgHandler instanceof MessageHandler.Partial<?>) { - ((MessageHandler.Partial<String>) textMsgHandler).onMessage( - messageBufferText.toString(), last); + ((MessageHandler.Partial<String>) textMsgHandler) + .onMessage(messageBufferText.toString(), last); } else { // Caller ensures last == true if this branch is used - ((MessageHandler.Whole<String>) textMsgHandler).onMessage( - messageBufferText.toString()); + ((MessageHandler.Whole<String>) textMsgHandler) + .onMessage(messageBufferText.toString()); } } catch (Throwable t) { handleThrowableOnSend(t); @@ -415,8 +407,8 @@ public abstract class WsFrameBase { // Convert bytes to UTF-8 messageBufferBinary.flip(); while (true) { - CoderResult cr = utf8DecoderMessage.decode( - messageBufferBinary, messageBufferText, false); + CoderResult cr = utf8DecoderMessage.decode(messageBufferBinary, messageBufferText, + false); if (cr.isError()) { throw new WsIOException(new CloseReason( CloseCodes.NOT_CONSISTENT, @@ -458,8 +450,8 @@ public abstract class WsFrameBase { // Frame is fully received // Convert bytes to UTF-8 while (true) { - CoderResult cr = utf8DecoderMessage.decode(messageBufferBinary, - messageBufferText, last); + CoderResult cr = utf8DecoderMessage.decode(messageBufferBinary, messageBufferText, + last); if (cr.isError()) { throw new WsIOException(new CloseReason( CloseCodes.NOT_CONSISTENT, @@ -520,14 +512,12 @@ public abstract class WsFrameBase { if (!usePartial()) { CloseReason cr = new CloseReason(CloseCodes.TOO_BIG, sm.getString("wsFrame.bufferTooSmall", - Integer.valueOf( - messageBufferBinary.capacity()), + Integer.valueOf(messageBufferBinary.capacity()), Long.valueOf(payloadLength))); throw new WsIOException(cr); } messageBufferBinary.flip(); - ByteBuffer copy = - ByteBuffer.allocate(messageBufferBinary.limit()); + ByteBuffer copy = ByteBuffer.allocate(messageBufferBinary.limit()); copy.put(messageBufferBinary); copy.flip(); sendMessageBinary(copy, false); @@ -542,8 +532,7 @@ public abstract class WsFrameBase { // - the message is complete if (usePartial() || !continuationExpected) { messageBufferBinary.flip(); - ByteBuffer copy = - ByteBuffer.allocate(messageBufferBinary.limit()); + ByteBuffer copy = ByteBuffer.allocate(messageBufferBinary.limit()); copy.put(messageBufferBinary); copy.flip(); sendMessageBinary(copy, !continuationExpected); @@ -575,8 +564,7 @@ public abstract class WsFrameBase { private void sendMessageBinary(ByteBuffer msg, boolean last) throws WsIOException { if (binaryMsgHandler instanceof WrappedMessageHandler) { - long maxMessageSize = - ((WrappedMessageHandler) binaryMsgHandler).getMaxMessageSize(); + long maxMessageSize = ((WrappedMessageHandler) binaryMsgHandler).getMaxMessageSize(); if (maxMessageSize > -1 && msg.remaining() > maxMessageSize) { throw new WsIOException(new CloseReason(CloseCodes.TOO_BIG, sm.getString("wsFrame.messageTooBig", @@ -591,7 +579,7 @@ public abstract class WsFrameBase { // Caller ensures last == true if this branch is used ((MessageHandler.Whole<ByteBuffer>) binaryMsgHandler).onMessage(msg); } - } catch(Throwable t) { + } catch (Throwable t) { handleThrowableOnSend(t); } } @@ -677,11 +665,9 @@ public abstract class WsFrameBase { } - protected static long byteArrayToLong(byte[] b, int start, int len) - throws IOException { + protected static long byteArrayToLong(byte[] b, int start, int len) throws IOException { if (len > 8) { - throw new IOException(sm.getString("wsFrame.byteToLongFail", - Long.valueOf(len))); + throw new IOException(sm.getString("wsFrame.byteToLongFail", Long.valueOf(len))); } int shift = 0; long result = 0; diff --git a/java/org/apache/tomcat/websocket/WsFrameClient.java b/java/org/apache/tomcat/websocket/WsFrameClient.java index 546810c..ea1c014 100644 --- a/java/org/apache/tomcat/websocket/WsFrameClient.java +++ b/java/org/apache/tomcat/websocket/WsFrameClient.java @@ -31,16 +31,15 @@ import org.apache.tomcat.util.res.StringManager; public class WsFrameClient extends WsFrameBase { private final Log log = LogFactory.getLog(WsFrameClient.class); // must not be static - private static final StringManager sm = - StringManager.getManager(Constants.PACKAGE_NAME); + private static final StringManager sm = StringManager.getManager(WsFrameClient.class); private final AsyncChannelWrapper channel; - private final CompletionHandler<Integer,Void> handler; + private final CompletionHandler<Integer, Void> handler; // Not final as it may need to be re-sized - private ByteBuffer response; + private volatile ByteBuffer response; - public WsFrameClient(ByteBuffer response, AsyncChannelWrapper channel, - WsSession wsSession, Transformation transformation) { + public WsFrameClient(ByteBuffer response, AsyncChannelWrapper channel, WsSession wsSession, + Transformation transformation) { super(wsSession, transformation); this.response = response; this.channel = channel; @@ -90,8 +89,7 @@ public class WsFrameClient extends WsFrameBase { if (t instanceof WsIOException) { cr = ((WsIOException) t).getCloseReason(); } else { - cr = new CloseReason( - CloseCodes.CLOSED_ABNORMALLY, t.getMessage()); + cr = new CloseReason(CloseCodes.CLOSED_ABNORMALLY, t.getMessage()); } wsSession.doClose(cr, cr, true); @@ -110,9 +108,7 @@ public class WsFrameClient extends WsFrameBase { return log; } - - private class WsFrameClientCompletionHandler - implements CompletionHandler<Integer,Void> { + private class WsFrameClientCompletionHandler implements CompletionHandler<Integer, Void> { @Override public void completed(Integer result, Void attachment) { @@ -146,8 +142,8 @@ public class WsFrameClient extends WsFrameBase { public void failed(Throwable exc, Void attachment) { if (exc instanceof ReadBufferOverflowException) { // response will be empty if this exception is thrown - response = ByteBuffer.allocate( - ((ReadBufferOverflowException) exc).getMinBufferSize()); + response = ByteBuffer + .allocate(((ReadBufferOverflowException) exc).getMinBufferSize()); response.flip(); try { processSocketRead(); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org