svn commit: r1426153 - in /tomcat/trunk: java/org/apache/tomcat/websocket/WsFrame.java java/org/apache/tomcat/websocket/WsRemoteEndpoint.java webapps/examples/WEB-INF/classes/websocket/echo/EchoAnnota

2012-12-27 Thread markt
Author: markt
Date: Thu Dec 27 10:24:00 2012
New Revision: 1426153

URL: http://svn.apache.org/viewvc?rev=1426153&view=rev
Log:
Make the annotation based echo example support partial data so huge buffers 
aren't required to pass the Autobahn tests
Simplify WsFrame by replacing frameStart and headerLength with readPos. When 
the frame is bigger than the input buffer the former didn't make much sense 
anyway.
Re-write the processing of text data to make it easier to follow.
Make the application responsible for thread-safety of 
Servlet[Input|Output]Stream

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java

tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoAnnotation.java
tomcat/trunk/webapps/examples/WEB-INF/web.xml

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java?rev=1426153&r1=1426152&r2=1426153&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Thu Dec 27 
10:24:00 2012
@@ -68,16 +68,14 @@ public class WsFrame {
 private boolean fin = false;
 private int rsv = 0;
 private byte opCode = 0;
-private int frameStart = 0;
-private int headerLength = 0;
 private byte[] mask = new byte[4];
 private int maskIndex = 0;
 private long payloadLength = 0;
-private int payloadRead = 0;
 private long payloadWritten = 0;
 
 // Attributes tracking state
 private State state = State.NEW_FRAME;
+private int readPos = 0;
 private int writePos = 0;
 
 public WsFrame(ServletInputStream sis, WsSession wsSession) {
@@ -97,31 +95,33 @@ public class WsFrame {
  * Called when there is data in the ServletInputStream to process.
  */
 public void onDataAvailable() throws IOException {
-while (sis.isReady()) {
-// Fill up the input buffer with as much data as we can
-int read = sis.read(inputBuffer, writePos,
-inputBuffer.length - writePos);
-if (read == 0) {
-return;
-}
-if (read == -1) {
-throw new EOFException();
-}
-writePos += read;
-while (true) {
-if (state == State.NEW_FRAME) {
-if (!processInitialHeader()) {
-break;
-}
+synchronized (sis) {
+while (sis.isReady()) {
+// Fill up the input buffer with as much data as we can
+int read = sis.read(inputBuffer, writePos,
+inputBuffer.length - writePos);
+if (read == 0) {
+return;
 }
-if (state == State.PARTIAL_HEADER) {
-if (!processRemainingHeader()) {
-break;
-}
+if (read == -1) {
+throw new EOFException();
 }
-if (state == State.DATA) {
-if (!processData()) {
-break;
+writePos += read;
+while (true) {
+if (state == State.NEW_FRAME) {
+if (!processInitialHeader()) {
+break;
+}
+}
+if (state == State.PARTIAL_HEADER) {
+if (!processRemainingHeader()) {
+break;
+}
+}
+if (state == State.DATA) {
+if (!processData()) {
+break;
+}
 }
 }
 }
@@ -135,10 +135,10 @@ public class WsFrame {
  */
 private boolean processInitialHeader() throws IOException {
 // Need at least two bytes of data to do this
-if (writePos - frameStart < 2) {
+if (writePos - readPos < 2) {
 return false;
 }
-int b = inputBuffer[frameStart];
+int b = inputBuffer[readPos++];
 fin = (b & 0x80) > 0;
 rsv = (b & 0x70) >>> 4;
 if (rsv != 0) {
@@ -183,7 +183,7 @@ public class WsFrame {
 }
 continuationExpected = !fin;
 }
-b = inputBuffer[frameStart + 1];
+b = inputBuffer[readPos++];
 // Client data must be masked
 if ((b & 0x80) == 0) {
 throw new IOException(sm.getString("wsFrame.notMasked"));
@@ -199,22 +199,24 @@ public class WsFrame {
  * processing of the header
  */
 private boolean processRemainingHeader() throws IOEx

svn commit: r1426173 - /tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java

2012-12-27 Thread markt
Author: markt
Date: Thu Dec 27 11:52:59 2012
New Revision: 1426173

URL: http://svn.apache.org/viewvc?rev=1426173&view=rev
Log:
Don't assume frame starts at the start of the input buffer

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java?rev=1426173&r1=1426172&r2=1426173&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Thu Dec 27 
11:52:59 2012
@@ -212,10 +212,10 @@ public class WsFrame {
 }
 // Calculate new payload length if necessary
 if (payloadLength == 126) {
-payloadLength = byteArrayToLong(inputBuffer, 2, 2);
+payloadLength = byteArrayToLong(inputBuffer, readPos, 2);
 readPos += 2;
 } else if (payloadLength == 127) {
-payloadLength = byteArrayToLong(inputBuffer, 2, 8);
+payloadLength = byteArrayToLong(inputBuffer, readPos, 8);
 readPos += 8;
 }
 if (isControl()) {



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1426274 - /tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java

2012-12-27 Thread markt
Author: markt
Date: Thu Dec 27 17:48:56 2012
New Revision: 1426274

URL: http://svn.apache.org/viewvc?rev=1426274&view=rev
Log:
Formatting, javadoc and the remaining TODO

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java?rev=1426274&r1=1426273&r2=1426274&view=diff
==
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java 
Thu Dec 27 17:48:56 2012
@@ -18,20 +18,19 @@ package org.apache.tomcat.websocket;
 
 import javax.websocket.server.DefaultServerConfiguration;
 
-public class PojoEndpointConfiguration extends
-DefaultServerConfiguration {
+/**
+ * Provides the configuration for POJOs annotated at WebSocket endpoints. It
+ * provides the means, via casting, of new {@link WsEndpointPojo} instances
+ * obtaining POJO endpoint specific configuration settings such as the mapping
+ * of onXxx calls to POJO methods.
+ */
+public class PojoEndpointConfiguration extends DefaultServerConfiguration {
 
 private final Class pojoClass;
 private final PojoMethodMapping methodMapping;
 private final String servletPath;
 private final String pathInfo;
 
-@Override
-public boolean checkOrigin(String originHeaderValue) {
-// Allow all
-return true;
-}
-
 
 PojoEndpointConfiguration(Class pojoClass,
 PojoMethodMapping methodMapping, String servletPath,
@@ -45,16 +44,22 @@ public class PojoEndpointConfiguration e
 
 
 @Override
+public boolean checkOrigin(String originHeaderValue) {
+// Allow all
+return true;
+}
+
+
+@Override
 public String getPath() {
 return servletPath;
 }
 
+
 public Object getPojo() {
 try {
 return pojoClass.newInstance();
 } catch (InstantiationException | IllegalAccessException e) {
-// TODO Auto-generated catch block
-e.printStackTrace();
 throw new IllegalArgumentException(e);
 }
 }



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1426279 - in /tomcat/trunk/java: javax/websocket/server/DefaultServerConfiguration.java javax/websocket/server/ServerEndpointConfiguration.java org/apache/tomcat/websocket/PojoEndpointCon

2012-12-27 Thread markt
Author: markt
Date: Thu Dec 27 18:08:14 2012
New Revision: 1426279

URL: http://svn.apache.org/viewvc?rev=1426279&view=rev
Log:
Javadoc and remove unnecessary code

Modified:
tomcat/trunk/java/javax/websocket/server/DefaultServerConfiguration.java
tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java

Modified: 
tomcat/trunk/java/javax/websocket/server/DefaultServerConfiguration.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/server/DefaultServerConfiguration.java?rev=1426279&r1=1426278&r2=1426279&view=diff
==
--- tomcat/trunk/java/javax/websocket/server/DefaultServerConfiguration.java 
(original)
+++ tomcat/trunk/java/javax/websocket/server/DefaultServerConfiguration.java 
Thu Dec 27 18:08:14 2012
@@ -26,6 +26,9 @@ import javax.websocket.Endpoint;
 import javax.websocket.Extension;
 import javax.websocket.HandshakeResponse;
 
+/**
+ * Provides the default implementation for WebSocket server endpoints.
+ */
 public class DefaultServerConfiguration implements ServerEndpointConfiguration 
{
 
 private Class endpointClass;
@@ -101,6 +104,11 @@ public class DefaultServerConfiguration 
 return null;
 }
 
+/**
+ * {@inheritDoc}
+ *
+ * The default implementation accepts all connection requests.
+ */
 @Override
 public boolean checkOrigin(String originHeaderValue) {
 return true;

Modified: 
tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java?rev=1426279&r1=1426278&r2=1426279&view=diff
==
--- tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java 
(original)
+++ tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java 
Thu Dec 27 18:08:14 2012
@@ -32,11 +32,24 @@ public interface ServerEndpointConfigura
 
 List getNegotiatedExtensions(List 
requestedExtensions);
 
+/**
+ * Enables the WebSocket endpoint to acceot or reject connections based on
+ * the HTTP origin header.
+ *
+ * @param originHeaderValue The HTTP origin header provided by the client.
+ *
+ * @return  true if the request should be accepted otherwise
+ *  false
+ */
 boolean checkOrigin(String originHeaderValue);
 
 boolean matchesURI(URI uri);
 
 void modifyHandshake(HandshakeRequest request, HandshakeResponse response);
 
+/**
+ * Returns the path at which this WebSocket server endpoint has been
+ * registered. It may be a path or a level 0 URI template.
+ */
 String getPath();
 }

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java?rev=1426279&r1=1426278&r2=1426279&view=diff
==
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java 
Thu Dec 27 18:08:14 2012
@@ -44,13 +44,6 @@ public class PojoEndpointConfiguration e
 
 
 @Override
-public boolean checkOrigin(String originHeaderValue) {
-// Allow all
-return true;
-}
-
-
-@Override
 public String getPath() {
 return servletPath;
 }



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1426309 - in /tomcat/trunk: java/javax/websocket/ java/org/apache/tomcat/websocket/ test/org/apache/tomcat/websocket/

2012-12-27 Thread markt
Author: markt
Date: Thu Dec 27 20:41:08 2012
New Revision: 1426309

URL: http://svn.apache.org/viewvc?rev=1426309&view=rev
Log:
Fill in some Javadoc.
Rename various fields/methods/parameters for consistency
Remove unnecessary code

Added:
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java
  - copied, changed from r1426301, 
tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java
Removed:
tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java
Modified:
tomcat/trunk/java/javax/websocket/MessageHandler.java
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java

tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBase.java

tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncBinary.java

tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerAsyncString.java
tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBase.java

tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBase.java

tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicBinary.java

tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicPong.java

tomcat/trunk/java/org/apache/tomcat/websocket/PojoMessageHandlerBasicString.java
tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java
tomcat/trunk/java/org/apache/tomcat/websocket/ServerContainerImpl.java
tomcat/trunk/java/org/apache/tomcat/websocket/Util.java
tomcat/trunk/test/org/apache/tomcat/websocket/TestUtil.java

Modified: tomcat/trunk/java/javax/websocket/MessageHandler.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/MessageHandler.java?rev=1426309&r1=1426308&r2=1426309&view=diff
==
--- tomcat/trunk/java/javax/websocket/MessageHandler.java (original)
+++ tomcat/trunk/java/javax/websocket/MessageHandler.java Thu Dec 27 20:41:08 
2012
@@ -20,11 +20,23 @@ public interface MessageHandler {
 
 interface Async extends MessageHandler {
 
+/**
+ * Called when part of a message is available to be processed.
+ *
+ * @param messagePart   The message part
+ * @param last  true if this is the last part of
+ *  this message, else false
+ */
 void onMessage(T messagePart, boolean last);
 }
 
 interface Basic extends MessageHandler {
 
+/**
+ * Called when a whole message is available to be processed.
+ *
+ * @param messagePart   The message
+ */
 void onMessage(T message);
 }
 }

Copied: tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java (from 
r1426301, tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java)
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java?p2=tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java&p1=tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java&r1=1426301&r2=1426309&rev=1426309&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsEndpointPojo.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpoint.java Thu Dec 27 
20:41:08 2012
@@ -30,7 +30,7 @@ import javax.websocket.Session;
  * {@link javax.websocket.server.WebSocketEndpoint} so they appear as standard
  * {@link Endpoint} instances.
  */
-public class WsEndpointPojo extends Endpoint {
+public class PojoEndpoint extends Endpoint {
 
 private Object pojo;
 private String pathInfo;
@@ -43,7 +43,7 @@ public class WsEndpointPojo extends Endp
 PojoEndpointConfiguration pec =
 (PojoEndpointConfiguration) endpointConfiguration;
 
-pojo = pec.getPojo();
+pojo = pec.createPojo();
 pathInfo = pec.getPathInfo();
 methodMapping = pec.getMethodMapping();
 

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java?rev=1426309&r1=1426308&r2=1426309&view=diff
==
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java 
Thu Dec 27 20:41:08 2012
@@ -20,7 +20,7 @@ import javax.websocket.server.DefaultSer
 
 /**
  * Provides the configuration for POJOs annotated at WebSocket endpoints. It
- * provides the means, via casting, of new {@link WsEndpointPojo} instances
+ * provides the means, via casting, of new {@link PojoEndpoint} instances
  * obtaining POJO endpoint specific configuration settings such as the mapping
  * of onXxx calls to POJO methods.
  */
@@ -28,

svn commit: r1426333 - /tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java

2012-12-27 Thread kkolinko
Author: kkolinko
Date: Thu Dec 27 21:28:06 2012
New Revision: 1426333

URL: http://svn.apache.org/viewvc?rev=1426333&view=rev
Log:
Correct a typo (followup to r1426279 )

Modified:
tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java

Modified: 
tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java?rev=1426333&r1=1426332&r2=1426333&view=diff
==
--- tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java 
(original)
+++ tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java 
Thu Dec 27 21:28:06 2012
@@ -33,7 +33,7 @@ public interface ServerEndpointConfigura
 List getNegotiatedExtensions(List 
requestedExtensions);
 
 /**
- * Enables the WebSocket endpoint to acceot or reject connections based on
+ * Enables the WebSocket endpoint to accept or reject connections based on
  * the HTTP origin header.
  *
  * @param originHeaderValue The HTTP origin header provided by the client.



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1426336 - in /tomcat/trunk/java: javax/websocket/PongMessage.java org/apache/tomcat/websocket/PojoMethodMapping.java org/apache/tomcat/websocket/Utf8Decoder.java org/apache/tomcat/websock

2012-12-27 Thread markt
Author: markt
Date: Thu Dec 27 21:40:39 2012
New Revision: 1426336

URL: http://svn.apache.org/viewvc?rev=1426336&view=rev
Log:
Javadoc

Modified:
tomcat/trunk/java/javax/websocket/PongMessage.java
tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java
tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java

Modified: tomcat/trunk/java/javax/websocket/PongMessage.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/PongMessage.java?rev=1426336&r1=1426335&r2=1426336&view=diff
==
--- tomcat/trunk/java/javax/websocket/PongMessage.java (original)
+++ tomcat/trunk/java/javax/websocket/PongMessage.java Thu Dec 27 21:40:39 2012
@@ -18,6 +18,13 @@ package javax.websocket;
 
 import java.nio.ByteBuffer;
 
+/**
+ * Represents a WebSocket Pong message and used by message handlers to enable
+ * applications to process the response to any Pings they send.
+ */
 public interface PongMessage {
+/**
+ * Obtain the payload of the Pong message as a ByteBuffer.
+ */
 ByteBuffer getApplicationData();
 }

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java?rev=1426336&r1=1426335&r2=1426336&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java Thu 
Dec 27 21:40:39 2012
@@ -37,7 +37,8 @@ import javax.websocket.server.WebSocketP
 /**
  * For a POJO class annotated with
  * {@link javax.websocket.server.WebSocketEndpoint}, an instance of this class
- * caches the method and parameter information for the onXXX calls.
+ * caches the method handlers and the method and parameter information for the
+ * onXXX calls.
  */
 public class PojoMethodMapping {
 

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java?rev=1426336&r1=1426335&r2=1426336&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java Thu Dec 27 
21:40:39 2012
@@ -26,7 +26,9 @@ import org.apache.tomcat.util.buf.B2CCon
 /**
  * Decodes bytes to UTF-8. Extracted from Apache Harmony and modified to reject
  * code points from U+D800 to U+DFFF as per RFC3629. The standard Java decoder
- * does not reject these.
+ * does not reject these. It has also been modified to reject code points
+ * greater than U+10 which the standard Java decoder rejects but the 
harmony
+ * one does not.
  */
 public class Utf8Decoder extends CharsetDecoder {
 

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java?rev=1426336&r1=1426335&r2=1426336&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Thu Dec 27 
21:40:39 2012
@@ -33,8 +33,9 @@ import javax.websocket.PongMessage;
 import org.apache.tomcat.util.res.StringManager;
 
 /**
- * Takes the ServletInputStream and converts the received data into WebSocket
- * frames.
+ * Takes the ServletInputStream process the WebSocket frames it contains and
+ * extracts the messages. WebSocket Pings received will be responded to
+ * automatically without any action required by the application.
  */
 public class WsFrame {
 



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: svn commit: r1426279 - in /tomcat/trunk/java: javax/websocket/server/DefaultServerConfiguration.java javax/websocket/server/ServerEndpointConfiguration.java org/apache/tomcat/websocket/PojoEndpoin

2012-12-27 Thread Konstantin Kolinko
2012/12/27  :
> Author: markt
> Date: Thu Dec 27 18:08:14 2012
> New Revision: 1426279
>
> URL: http://svn.apache.org/viewvc?rev=1426279&view=rev
> Log:
> Javadoc and remove unnecessary code
>
> Modified:
> tomcat/trunk/java/javax/websocket/server/DefaultServerConfiguration.java
> tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java
> 
> tomcat/trunk/java/org/apache/tomcat/websocket/PojoEndpointConfiguration.java
>

> --- tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java 
> (original)
> +++ tomcat/trunk/java/javax/websocket/server/ServerEndpointConfiguration.java 
> Thu Dec 27 18:08:14 2012
> @@ -32,11 +32,24 @@ public interface ServerEndpointConfigura
>
>  List getNegotiatedExtensions(List 
> requestedExtensions);
>
> +/**
> + * Enables the WebSocket endpoint to acceot or reject connections based 
> on

(fixed a typo)

> + * the HTTP origin header.

"the HTTP origin header" is understandable, but sounds as if the order
of adjectives is wrong.

Maybe " the "Origin" HTTP header " ?

Speaking of which, the "Origin" header is not defined by RFC2616
(HTTP/1.1), but by its own RFC6454 (The Web Origin Concept).

http://tools.ietf.org/html/rfc6454

> + *
> + * @param originHeaderValue The HTTP origin header provided by the 
> client.
> + *
> + * @return  true if the request should be accepted otherwise
> + *  false
> + */
>  boolean checkOrigin(String originHeaderValue);
>
>  boolean matchesURI(URI uri);
>
>  void modifyHandshake(HandshakeRequest request, HandshakeResponse 
> response);
>
> +/**
> + * Returns the path at which this WebSocket server endpoint has been
> + * registered. It may be a path or a level 0 URI template.

What is "level 0" here?

(A quick googling found
http://tools.ietf.org/html/rfc6570#section-1.2
which should be right as that RFC is mentioned by JSR356,
but numbering there starts with Level 1. Where does "Level 0" come from?).

> + */
>  String getPath();
>  }
>

Best regards,
Konstantin Kolinko

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1426344 - /tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java

2012-12-27 Thread markt
Author: markt
Date: Thu Dec 27 22:07:09 2012
New Revision: 1426344

URL: http://svn.apache.org/viewvc?rev=1426344&view=rev
Log:
Spotted a couple of threads hanging waiting on this barrier after an aborted 
Autobahn test. Try and stop that from happening.

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java?rev=1426344&r1=1426343&r2=1426344&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java Thu Dec 
27 22:07:09 2012
@@ -263,6 +263,11 @@ public class WsRemoteEndpoint implements
 }
 }
 }
+if (opCode == Constants.OPCODE_CLOSE) {
+// Connection is closing - ensure no threads are stuck waiting on
+// the write barrier
+writeBarrier.reset();
+}
 }
 
 



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



[Tomcat Wiki] Update of "FAQ/Monitoring" by ChristopherSchultz

2012-12-27 Thread Apache Wiki
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Tomcat Wiki" for change 
notification.

The "FAQ/Monitoring" page has been changed by ChristopherSchultz:
http://wiki.apache.org/tomcat/FAQ/Monitoring?action=diff&rev1=7&rev2=8

Comment:
Added JNDI DataSource JMX Bean and attributes

   * JMX Bean: `Catalina:type=Manager,context=[context name],host=[hostname]`
   * Attributes: `activeSessions`
  
+ 
+ === JNDI DataSource ===
+ 
+  * JMX Bean: `Catalina:type=DataSource,context=/[context 
name],host=[hostname],class=javax.sql.DataSource,name="[JNDI name]"
+  * Attributes: `numActive`, `numIdle`
+ 
  = External Monitoring Tools =
  
  Plug-in-based monitoring software like Nagios and Icinga may need some help 
interacting with Tomcat's JMXProxyServlet. [[tools/check_jmxproxy.pl]] is a 
Perl script that can be used with these tools to monitor Tomcat via the 
JMXProxyServlet.

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1426356 - in /tomcat/trunk: java/org/apache/tomcat/websocket/Utf8Decoder.java test/org/apache/tomcat/websocket/TestUtf8.java

2012-12-27 Thread markt
Author: markt
Date: Thu Dec 27 22:52:45 2012
New Revision: 1426356

URL: http://svn.apache.org/viewvc?rev=1426356&view=rev
Log:
Add early detection of invalid sequences - Autobahn tests now pass in full.

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java
tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java?rev=1426356&r1=1426355&r2=1426356&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java Thu Dec 27 
22:52:45 2012
@@ -99,6 +99,9 @@ public class Utf8Decoder extends Charset
 return CoderResult.malformedForLength(1);
 }
 if (limit - pos < 1 + tail) {
+// No early test for invalid sequences here as peeking
+// at the next byte is harder (and Tomcat's WebSocket
+// implementation always uses array backed buffers)
 return CoderResult.UNDERFLOW;
 }
 int nextByte;
@@ -116,10 +119,14 @@ public class Utf8Decoder extends Charset
 }
 pos += tail;
 }
-// Note: This is the additional test added
-if ((jchar >= 0xD800 && jchar <= 0xDFFF) || jchar > 0x10) {
+// Apache Tomcat added test
+if (jchar >= 0xD800 && jchar <= 0xDFFF) {
 return CoderResult.unmappableForLength(3);
 }
+// Apache Tomcat added test
+if (jchar > 0x10) {
+return CoderResult.unmappableForLength(4);
+}
 if (jchar <= 0x) {
 out.put((char) jchar);
 outRemaining--;
@@ -162,6 +169,13 @@ public class Utf8Decoder extends Charset
 return CoderResult.malformedForLength(1);
 }
 if (inIndexLimit - inIndex < 1 + tail) {
+// Apache Tomcat added test - detects invalid sequence as
+// early as possible
+if (jchar == 0x74 && inIndexLimit > inIndex + 1) {
+if ((bArr[inIndex + 1] & 0xFF) > 0x8F) {
+return CoderResult.unmappableForLength(4);
+}
+}
 break;
 }
 for (int i = 0; i < tail; i++) {
@@ -182,10 +196,14 @@ public class Utf8Decoder extends Charset
 }
 inIndex += tail;
 }
-// Note: This is the additional test added
-if ((jchar >= 0xD800 && jchar <= 0xDFFF) || jchar > 0x10) {
+// Apache Tomcat added test
+if (jchar >= 0xD800 && jchar <= 0xDFFF) {
 return CoderResult.unmappableForLength(3);
 }
+// Apache Tomcat added test
+if (jchar > 0x10) {
+return CoderResult.unmappableForLength(4);
+}
 if (jchar <= 0x) {
 cArr[outIndex++] = (char) jchar;
 outRemaining--;

Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java?rev=1426356&r1=1426355&r2=1426356&view=diff
==
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestUtf8.java Thu Dec 27 
22:52:45 2012
@@ -89,9 +89,7 @@ public class TestUtf8 {
 
 @Test
 public void testHarmonyDecoder2() {
-// Ideally should fail after 2 bytes (i==1) but that makes the decoder
-// a lot more complex to write
-doHarmonyDecoder(SRC_BYTES_2, true, 3);
+doHarmonyDecoder(SRC_BYTES_2, true, 1);
 }
 
 



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: svn commit: r1426336 - in /tomcat/trunk/java: javax/websocket/PongMessage.java org/apache/tomcat/websocket/PojoMethodMapping.java org/apache/tomcat/websocket/Utf8Decoder.java org/apache/tomcat/web

2012-12-27 Thread Konstantin Kolinko
2012/12/28  :
> Author: markt
> Date: Thu Dec 27 21:40:39 2012
> New Revision: 1426336
>
> URL: http://svn.apache.org/viewvc?rev=1426336&view=rev
> Log:
> Javadoc
>
> Modified:
> tomcat/trunk/java/javax/websocket/PongMessage.java
> tomcat/trunk/java/org/apache/tomcat/websocket/PojoMethodMapping.java
> tomcat/trunk/java/org/apache/tomcat/websocket/Utf8Decoder.java
> tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
>


> --- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original)
> +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Thu Dec 27 
> 21:40:39 2012
> @@ -33,8 +33,9 @@ import javax.websocket.PongMessage;
>  import org.apache.tomcat.util.res.StringManager;
>
>  /**
> - * Takes the ServletInputStream and converts the received data into WebSocket
> - * frames.
> + * Takes the ServletInputStream process the WebSocket frames it contains and

s/ process/ , processes / ?

> + * extracts the messages. WebSocket Pings received will be responded to
> + * automatically without any action required by the application.
>   */
>  public class WsFrame {
>

Best regards,
Konstantin Kolinko

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



buildbot failure in ASF Buildbot on tomcat-trunk

2012-12-27 Thread buildbot
The Buildbot has detected a new failure on builder tomcat-trunk while building 
ASF Buildbot.
Full details are available at:
 http://ci.apache.org/builders/tomcat-trunk/builds/3698

Buildbot URL: http://ci.apache.org/

Buildslave for this Build: bb-vm_ubuntu

Build Reason: scheduler
Build Source Stamp: [branch tomcat/trunk] 1426344
Blamelist: markt

BUILD FAILED: failed compile_1

sincerely,
 -The Buildbot





Re: svn commit: r1426009 - /tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java

2012-12-27 Thread Konstantin Kolinko
2012/12/27  :
> Author: markt
> Date: Wed Dec 26 20:19:51 2012
> New Revision: 1426009
>
> URL: http://svn.apache.org/viewvc?rev=1426009&view=rev
> Log:
> Correctly set isText flag for text messages
>
> Modified:
> tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java
>
> Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java?rev=1426009&r1=1426008&r2=1426009&view=diff
> ==
> --- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java 
> (original)
> +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java Wed 
> Dec 26 20:19:51 2012
> @@ -100,7 +100,7 @@ public class WsRemoteEndpoint implements
>  }
>  sendMessage(Constants.OPCODE_TEXT, textToByte, first, isLast);
>  if (!isLast) {
> -isText = Boolean.FALSE;
> +isText = Boolean.TRUE;
>  }
>  }

It seems something is missing with the above "!isLast" condition.
If I am reading it correctly, you are allowed to call

(a)
  endpoint.sendString(..);
  endpoint.sendBytes(..);

In (a) both the calls have isLast==true and the "isText" flag remains null.

So, is there a reason why the following should be failing:

(b)
  endpoint.sendPartialString(text, false);
  endpoint.sendPartialString(text, true);
  endpoint.sendBytes(..);

If both (a) and (b) should be working, then there must be some code
that resets "isText" flag back to the value of null. E.g. for the
above it should be

>  if (isLast) {
>  isText = null;
>  } else {
>  isText = Boolean.TRUE;
>  }

If both (a) and (b) should be failing, then the flag should be
assigned unconditionally,

>  isText = Boolean.TRUE;

Best regards,
Konstantin Kolinko

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



Re: svn commit: r1425985 - /tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties

2012-12-27 Thread Konstantin Kolinko
If I understand this correctly, you had to trim the text of
"wsFrame.textMessageTooBig" message?

Maybe add some comment there to warn future translators? Maybe
automatically truncate the i18n'ed message if it is too long?


2012/12/26  :
> Author: markt
> Date: Wed Dec 26 18:33:54 2012
> New Revision: 1425985
>
> URL: http://svn.apache.org/viewvc?rev=1425985&view=rev
> Log:
> Make sure reason phrases will fit into a control frame payload
>
> Modified:
> tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties
>
> Modified: 
> tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties
> URL: 
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties?rev=1425985&r1=1425984&r2=1425985&view=diff
> ==
> --- tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties 
> (original)
> +++ tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties Wed 
> Dec 26 18:33:54 2012
> @@ -21,7 +21,7 @@ serverContainer.servletContextMissing=No
>  uriTemplate.noMatch=The input template [{0}] generated the pattern [{1}] 
> which did not match the supplied pathInfo [{2}]
>  wsFrame.byteToLongFail=Too many bytes ([{0}]) were provided to be converted 
> into a long
>  wsFrame.controlFragmented=A fragmented control frame was received but 
> control frames may not be fragmented
> -wsFrame.controlPayloadTooBig=A control frame was sent with a payload of 
> length [{0}] which is larger than the maximum length permitted of 125 bytes
> +wsFrame.controlPayloadTooBig=A control frame was sent with a payload of size 
> [{0}] which is larger than the maximum permitted of 125 bytes
>  wsFrame.controlNoFin=A control frame was sent that did not have the fin bit 
> set. Control frames are not permitted to use continuation frames.
>  wsFrame.invalidOpCode= A WebSocket frame was sent with an unrecognised 
> opCode of [{0}]
>  wsFrame.invalidUtf8=A WebSocket text frame was received that could not be 
> decoded to UTF-8 because it contained invalid byte sequences
> @@ -29,5 +29,5 @@ wsFrame.invalidUtf8Close=A WebSocket clo
>  wsFrame.noContinuation=A new message was started when a continuation frame 
> was expected
>  wsFrame.notMasked=The client frame was not masked but all client frames must 
> be masked
>  wsFrame.oneByteCloseCode=The client sent a close frame with a single byte 
> payload which is not valid
> -wsFrame.textMessageTooBig=The decoded text message was too big to fit in the 
> output text message buffer and the endpoint does not support delivery of 
> partial messages
> +wsFrame.textMessageTooBig=The decoded text message was too big for the 
> output buffer and the endpoint does not support partial messages
>  wsFrame.wrongRsv=The client frame set the reserved bits to [{0}] which was 
> not supported by this endpoint
> \ No newline at end of file
>
>
>
> -
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
>

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



buildbot success in ASF Buildbot on tomcat-trunk

2012-12-27 Thread buildbot
The Buildbot has detected a restored build on builder tomcat-trunk while 
building ASF Buildbot.
Full details are available at:
 http://ci.apache.org/builders/tomcat-trunk/builds/3699

Buildbot URL: http://ci.apache.org/

Buildslave for this Build: bb-vm_ubuntu

Build Reason: scheduler
Build Source Stamp: [branch tomcat/trunk] 1426356
Blamelist: markt

Build succeeded!

sincerely,
 -The Buildbot





Re: svn commit: r1425680 - /tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java

2012-12-27 Thread Konstantin Kolinko
2012/12/25  :
> Author: markt
> Date: Mon Dec 24 21:07:01 2012
> New Revision: 1425680
>
> URL: http://svn.apache.org/viewvc?rev=1425680&view=rev
> Log:
> Text messages are always UTF8
> (Note that even with this fix Autobahn identifies a lot of UTF-8 handling 
> issues. The quick and dirty new String() approach needs a more robust 
> replacement.)
>
> Modified:
> tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
>
> Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java?rev=1425680&r1=1425679&r2=1425680&view=diff
> ==
> --- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original)
> +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Mon Dec 24 
> 21:07:01 2012
> @@ -18,6 +18,7 @@ package org.apache.tomcat.websocket;
>
>  import java.io.EOFException;
>  import java.io.IOException;
> +import java.io.UnsupportedEncodingException;
>  import java.nio.ByteBuffer;
>
>  import javax.servlet.ServletInputStream;
> @@ -282,8 +283,13 @@ public class WsFrame {
>  @SuppressWarnings("unchecked")
>  private void sendMessage(boolean last) {
>  if (textMessage) {
> -String payload =
> -new String(messageBuffer.array(), 0, 
> messageBuffer.limit());
> +String payload = null;
> +try {
> +payload = new String(messageBuffer.array(), 0,
> +messageBuffer.limit(), "UTF8");
> +} catch (UnsupportedEncodingException e) {
> +// All JVMs must support UTF8
> +}
>  MessageHandler mh = wsSession.getTextMessageHandler();
>  if (mh != null) {
>  if (mh instanceof MessageHandler.Async) {
>

Looking at the current code, "new String()" call still remains in WsFrame.java
Starting with Line 270:

if (controlBufferBinary.remaining() > 0) {
CoderResult cr = utf8DecoderControl.decode(
controlBufferBinary, controlBufferText, true);
if (cr.isError()) {
controlBufferBinary.clear();
controlBufferText.clear();
throw new WsIOException(new CloseReason(
CloseCodes.PROTOCOL_ERROR,
sm.getString("wsFrame.invalidUtf8Close")));
}
reason = new String(controlBufferBinary.array(),
controlBufferBinary.arrayOffset() +
controlBufferBinary.position(),
controlBufferBinary.remaining(), "UTF8");
}

Why use "new String(.., UTF8)" when there is
"utf8DecoderControl.decode(..)" call several lines above?

Isn't it supposed to use controlBufferText here ?

Best regards,
Konstantin Kolinko

-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org



svn commit: r1426369 - /tomcat/trunk/java/org/apache/tomcat/websocket/WsIOException.java

2012-12-27 Thread kkolinko
Author: kkolinko
Date: Fri Dec 28 00:08:03 2012
New Revision: 1426369

URL: http://svn.apache.org/viewvc?rev=1426369&view=rev
Log:
Correct a typo (followup to r1425648 )

Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/WsIOException.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsIOException.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsIOException.java?rev=1426369&r1=1426368&r2=1426369&view=diff
==
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsIOException.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsIOException.java Fri Dec 28 
00:08:03 2012
@@ -22,7 +22,7 @@ import javax.websocket.CloseReason;
 
 /**
  * Allows the WebSocket implementation to throw an {@link IOException} that
- * includes an {@link CloseReason} specific to the error that can be passed 
back
+ * includes a {@link CloseReason} specific to the error that can be passed back
  * to the client.
  */
 public class WsIOException extends IOException {



-
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org