You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2012/12/22 00:02:35 UTC

svn commit: r1425175 - in /tomcat/trunk/java/org/apache/tomcat/websocket: WsFrame.java WsRemoteEndpoint.java

Author: markt
Date: Fri Dec 21 23:02:35 2012
New Revision: 1425175

URL: http://svn.apache.org/viewvc?rev=1425175&view=rev
Log:
Send a close frame telling the client why the connection is being closed if the server buffers can't cope.

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java
    tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.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=1425175&r1=1425174&r2=1425175&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrame.java Fri Dec 21 23:02:35 2012
@@ -327,9 +327,13 @@ public class WsFrame {
                 return;
             }
             if (inputBuffer.length < frameSize) {
-                // Never going to work
                 // TODO i18n - buffer too small
-                throw new IOException();
+                CloseReason cr = new CloseReason(CloseCodes.TOO_BIG,
+                        "Buffer size: [" + inputBuffer.length +
+                        "], frame size: [" + frameSize + "]");
+                wsSession.close(cr);
+                wsSession.onClose(cr);
+                throw new IOException(cr.getReasonPhrase());
             }
             makeRoom();
         }

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=1425175&r1=1425174&r2=1425175&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpoint.java Fri Dec 21 23:02:35 2012
@@ -91,7 +91,10 @@ public class WsRemoteEndpoint implements
         CharBuffer cb = CharBuffer.wrap(fragment);
         CoderResult cr = encoder.encode(cb, textToByte, true);
         while (cr.isOverflow()) {
+            textToByte.flip();
             sendMessage(Constants.OPCODE_TEXT, textToByte, first, false);
+            textToByte.clear();
+            cr = encoder.encode(cb, textToByte, true);
             first = false;
         }
         sendMessage(Constants.OPCODE_TEXT, textToByte, first, isLast);
@@ -217,7 +220,6 @@ public class WsRemoteEndpoint implements
         }
         // If not the first fragment, it is a continuation with opCode of zero
 
-        message.flip();
         header.put(first);
 
         // Next write the length



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