[Bug 56952] Move JasperInitializer into separate jar
https://issues.apache.org/bugzilla/show_bug.cgi?id=56952 --- Comment #2 from Jan Bartel --- Hi Mark, I can totally understand that - I'm against jar proliferation in jetty too :). In fact, we created a feature for Jetty to define a pattern for SCIs to ignore for just this purpose. Just thought it might be good to separate the SCI from the jasper impl jar in case there's other use cases where there's no opportunity to implement an ignore pattern ... Jan -- You are receiving this mail because: You are the assignee for the bug. - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org
svn commit: r1624760 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/tomcat/websocket/LocalStrings.properties java/org/apache/tomcat/websocket/Util.java test/org/apache/tomcat/websocket/TestUtil.java
Author: violetagg Date: Sat Sep 13 16:08:30 2014 New Revision: 1624760 URL: http://svn.apache.org/r1624760 Log: Merged revisions 1604781, 1604788 from tomcat/trunk: - Add support for parsing the extension header - Strengthen WebSocket extension parameter validation Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/Util.java tomcat/tc7.0.x/trunk/test/org/apache/tomcat/websocket/TestUtil.java Propchange: tomcat/tc7.0.x/trunk/ -- Merged /tomcat/trunk:r1604781,1604788 Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties?rev=1624760&r1=1624759&r2=1624760&view=diff == --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties Sat Sep 13 16:08:30 2014 @@ -28,6 +28,7 @@ asyncChannelWrapperSecure.wrongStateWrit backgroundProcessManager.processFailed=A background process failed +util.notToken=An illegal extension parameter was specified with name [{0}] and value [{1}] util.invalidMessageHandler=The message handler provided does not have an onMessage(Object) method util.invalidType=Unable to coerce value [{0}] to type [{1}]. That type is not supported. util.unknownDecoderType=The Decoder type [{0}] is not recognized Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/Util.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/Util.java?rev=1624760&r1=1624759&r2=1624760&view=diff == --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/Util.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/Util.java Sat Sep 13 16:08:30 2014 @@ -43,6 +43,7 @@ import javax.websocket.Decoder.TextStrea import javax.websocket.DeploymentException; import javax.websocket.Encoder; import javax.websocket.EndpointConfig; +import javax.websocket.Extension; import javax.websocket.MessageHandler; import javax.websocket.PongMessage; import javax.websocket.Session; @@ -352,7 +353,6 @@ public class Util { } - public static Set getMessageHandlers( MessageHandler listener, EndpointConfig endpointConfig, Session session) { @@ -448,6 +448,85 @@ public class Util { } +public static void parseExtensionHeader(List extensions, +String header) { +// The relevant ABNF for the Sec-WebSocket-Extensions is as follows: +// extension-list = 1#extension +// extension = extension-token *( ";" extension-param ) +// extension-token = registered-token +// registered-token = token +// extension-param = token [ "=" (token | quoted-string) ] +// ; When using the quoted-string syntax variant, the value +// ; after quoted-string unescaping MUST conform to the +// ; 'token' ABNF. +// +// The limiting of parameter values to tokens or "quoted tokens" makes +// the parsing of the header significantly simpler and allows a number +// of short-cuts to be taken. + +// Step one, split the header into individual extensions using ',' as a +// separator +String unparsedExtensions[] = header.split(","); +for (String unparsedExtension : unparsedExtensions) { +// Step two, split the extension into the registered name and +// parameter/value pairs using ';' as a separator +String unparsedParameters[] = unparsedExtension.split(";"); +WsExtension extension = new WsExtension(unparsedParameters[0].trim()); + +for (int i = 1; i < unparsedParameters.length; i++) { +int equalsPos = unparsedParameters[i].indexOf('='); +String name; +String value; +if (equalsPos == -1) { +name = unparsedParameters[i].trim(); +value = null; +} else { +name = unparsedParameters[i].substring(0, equalsPos).trim(); +value = unparsedParameters[i].substring(equalsPos + 1).trim(); +int len = value.length(); +if (len > 1) { +if (value.charAt(0) == '\"' && value.charAt(len - 1) == '\"') { +value = value.substring(1, value.length() - 1); +} +} +} +//
svn commit: r1624761 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/tomcat/websocket/Transformation.java java/org/apache/tomcat/websocket/WsFrameBase.java
Author: violetagg Date: Sat Sep 13 16:18:56 2014 New Revision: 1624761 URL: http://svn.apache.org/r1624761 Log: Merged revisions 1604776, 1604818 from tomcat/trunk: - Add an interface for the transformation (by an extension) of WebSocket frames. Only supports transformation of incoming messages at this point. - Add some inner classes that will be required when Transformation / extension support is plumbed in. Added: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/Transformation.java - copied unchanged from r1604776, tomcat/trunk/java/org/apache/tomcat/websocket/Transformation.java Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java Propchange: tomcat/tc7.0.x/trunk/ -- Merged /tomcat/trunk:r1604776,1604818 Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java?rev=1624761&r1=1624760&r2=1624761&view=diff == --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java Sat Sep 13 16:18:56 2014 @@ -25,6 +25,7 @@ import java.nio.charset.CodingErrorActio import javax.websocket.CloseReason; import javax.websocket.CloseReason.CloseCodes; +import javax.websocket.Extension; import javax.websocket.MessageHandler; import javax.websocket.PongMessage; @@ -698,4 +699,86 @@ public abstract class WsFrameBase { private static enum State { NEW_FRAME, PARTIAL_HEADER, DATA } + + +private abstract class TerminalTransformation implements Transformation { + +@Override +public boolean validateRsvBits(int i) { +// Terminal transformations don't use RSV bits and there is no next +// transformation so always return true. +return true; +} + +@Override +public Extension getExtensionResponse() { +// Return null since terminal transformations are not extensions +return null; +} + +@Override +public void setNext(Transformation t) { +// NO-OP since this is the terminal transformation +} + +/** + * {@inheritDoc} + * + * Anything other than a value of zero for rsv is invalid. + */ +@Override +public boolean validateRsv(int rsv, byte opCode) { +return rsv == 0; +} +} + + +/** + * For use by the client implementation that needs to obtain payload data + * without the need for unmasking. + */ +private final class NoopTransformation extends TerminalTransformation { + +@Override +public boolean getMoreData(byte opCode, int rsv, ByteBuffer dest) { +// opCode is ignored as the transformation is the same for all +// opCodes +// rsv is ignored as it known to be zero at this point +long toWrite = Math.min( +payloadLength - payloadWritten, writePos - readPos); +toWrite = Math.min(toWrite, dest.remaining()); + +dest.put(inputBuffer, readPos, (int) toWrite); +readPos += toWrite; +payloadWritten += toWrite; +return (payloadWritten == payloadLength); +} +} + + +/** + * For use by the server implementation that needs to obtain payload data + * and unmask it before any further processing. + */ +private final class UnmaskTransformation extends TerminalTransformation { + +@Override +public boolean getMoreData(byte opCode, int rsv, ByteBuffer dest) { +// opCode is ignored as the transformation is the same for all +// opCodes +// rsv is ignored as it known to be zero at this point +while (payloadWritten < payloadLength && readPos < writePos && +dest.hasRemaining()) { +byte b = (byte) ((inputBuffer[readPos] ^ mask[maskIndex]) & 0xFF); +maskIndex++; +if (maskIndex == 4) { +maskIndex = 0; +} +readPos++; +payloadWritten++; +dest.put(b); +} +return (payloadWritten == payloadLength); +} +} } - To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org