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 2013/06/21 16:05:41 UTC

svn commit: r1495445 - in /tomcat/trunk/java/org/apache/tomcat/websocket: LocalStrings.properties WsSession.java

Author: markt
Date: Fri Jun 21 14:05:40 2013
New Revision: 1495445

URL: http://svn.apache.org/r1495445
Log:
WebSocket 1.0. Section 2.1.5. Session expiry must be signalled to the local endpoint with a close code of 1006.

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties
    tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java

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=1495445&r1=1495444&r2=1495445&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties Fri Jun 21 14:05:40 2013
@@ -57,7 +57,6 @@ wsSession.closed=The WebSocket session h
 wsSession.duplicateHandlerBinary=A binary message handler has already been configured
 wsSession.duplicateHandlerPong=A pong message handler has already been configured
 wsSession.duplicateHandlerText=A text message handler has already been configured
-wsSession.expireFailed=Unable to close expired session cleanly
 wsSession.sendCloseFail=Failed to send close message to remote endpoint
 wsSession.invalidHandlerTypePong=A pong message handler must implement MessageHandler.Basic
 wsSession.removeHandlerFailed=Unable to remove the handler [{0}] as it was not registered with this session

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1495445&r1=1495444&r2=1495445&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Fri Jun 21 14:05:40 2013
@@ -356,6 +356,38 @@ public class WsSession implements Sessio
 
 
     /**
+     * WebSocket 1.0. Section 2.1.5.
+     * Need internal close method as spec requires that the local endpoint
+     * receives a 1006 on timeout.
+     */
+    private void closeTimeout(CloseReason closeReason) {
+        // Double-checked locking. OK because state is volatile
+        if (state != State.OPEN) {
+            return;
+        }
+
+        synchronized (stateLock) {
+            if (state != State.OPEN) {
+                return;
+            }
+
+            // This state exists to protect against recursive calls to close()
+            // from Endpoint.onClose()
+            state = State.PRE_CLOSING;
+
+            CloseReason localCloseReason =
+                    new CloseReason(CloseCodes.CLOSED_ABNORMALLY,
+                            closeReason.getReasonPhrase());
+            fireEndpointOnClose(localCloseReason);
+
+            state = State.CLOSING;
+
+            sendCloseMessage(closeReason);
+        }
+    }
+
+
+    /**
      * Called when a close message is received. Should only ever happen once.
      * Also called after a protocol error when the ProtocolHandler needs to
      * force the closing of the connection.
@@ -501,12 +533,8 @@ public class WsSession implements Sessio
         }
 
         if (System.currentTimeMillis() - lastActive > timeout) {
-            try {
-                close(new CloseReason(CloseCodes.GOING_AWAY,
-                        sm.getString("wsSession.timeout")));
-            } catch (IOException e) {
-                log.warn(sm.getString("wsSession.expireFailed"), e);
-            }
+            closeTimeout(new CloseReason(CloseCodes.GOING_AWAY,
+                    sm.getString("wsSession.timeout")));
         }
     }
 



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