You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2011/10/04 21:37:01 UTC

svn commit: r1178927 - in /mina/vysper/trunk: ./ server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/ server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/

Author: ngn
Date: Tue Oct  4 19:37:01 2011
New Revision: 1178927

URL: http://svn.apache.org/viewvc?rev=1178927&view=rev
Log:
Updated WebSocket support to use the latest spec. Thanks Chistiph Hartmann for the patch (VYSPER-295)

Modified:
    mina/vysper/trunk/pom.xml
    mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
    mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
    mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java

Modified: mina/vysper/trunk/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/pom.xml?rev=1178927&r1=1178926&r2=1178927&view=diff
==============================================================================
--- mina/vysper/trunk/pom.xml (original)
+++ mina/vysper/trunk/pom.xml Tue Oct  4 19:37:01 2011
@@ -146,13 +146,13 @@
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
-        <version>1.5.3</version>
+        <version>1.6.1</version>
       </dependency>
 
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>jcl-over-slf4j</artifactId>
-        <version>1.5.3</version>
+        <version>1.6.1</version>
       </dependency>
 
       <dependency>
@@ -215,19 +215,19 @@
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-websocket</artifactId>
-        <version>7.2.1.v20101111</version>
+        <version>7.5.1.v20110908</version>
       </dependency>
 
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-servlet</artifactId>
-        <version>7.2.1.v20101111</version>
+        <version>7.5.1.v20110908</version>
       </dependency>
 
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-webapp</artifactId>
-        <version>7.2.1.v20101111</version>
+        <version>7.5.1.v20110908</version>
       </dependency>
 
       <!-- Test dependencies -->
@@ -252,7 +252,7 @@
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-log4j12</artifactId>
-        <version>1.5.3</version>
+        <version>1.6.1</version>
       </dependency>
 
       <dependency>

Modified: mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java?rev=1178927&r1=1178926&r2=1178927&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketBackedSessionContext.java Tue Oct  4 19:37:01 2011
@@ -47,25 +47,25 @@ import org.slf4j.LoggerFactory;
 import org.xml.sax.SAXException;
 
 /**
- * Specialized {@link SessionContext} for Websocket endpoints. 
+ * Specialized {@link SessionContext} for Websocket endpoints.
  *
  * @author The Apache MINA Project (dev@mina.apache.org)
  */
-public class WebSocketBackedSessionContext extends AbstractSessionContext implements WebSocket, XMLElementListener, StanzaWriter {
+public class WebSocketBackedSessionContext extends AbstractSessionContext implements WebSocket, XMLElementListener, StanzaWriter, WebSocket.OnTextMessage {
 
     private final static Charset CHARSET = Charset.forName("UTF-8");
     private final static CharsetDecoder CHARSET_DECODER = CHARSET.newDecoder();
-    
+
     private final static Logger LOG = LoggerFactory.getLogger(WebSocketBackedSessionContext.class);
 
-    private Outbound outbound;
+    private Connection outbound;
     private NonBlockingXMLReader xmlReader = new DefaultNonBlockingXMLReader();
-    
+
     public WebSocketBackedSessionContext(ServerRuntimeContext serverRuntimeContext) {
         super(serverRuntimeContext, new SessionStateHolder());
         XMPPContentHandler contentHandler = new XMPPContentHandler(new StanzaBuilderFactory());
         contentHandler.setListener(this);
-        
+
         try {
             // we need to check the jabber:client/jabber:server NS declarations
             xmlReader.setFeature(DefaultNonBlockingXMLReader.FEATURE_NAMESPACE_PREFIXES, true);
@@ -104,37 +104,35 @@ public class WebSocketBackedSessionConte
     /**
      * {@inheritDoc}
      */
-    public void onConnect(Outbound outbound) {
+    public void onOpen(Connection outbound) {
         LOG.info("WebSocket client connected");
         this.outbound = outbound;
-        
+
         // set to encrypted to skip TLS
         sessionStateHolder.setState(SessionState.ENCRYPTED);
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public void onMessage(byte frame, String data) {
-        LOG.info("< " + data);
-        try {
-            xmlReader.parse(IoBuffer.wrap(data.getBytes(CHARSET.name())), CHARSET_DECODER);
-        } catch (IOException e) {
-            // should never happen since we read from a string
-            throw new RuntimeException(e);
-        } catch (SAXException e) {
-            Stanza errorStanza = ServerErrorResponses.getStreamError(StreamErrorCondition.XML_NOT_WELL_FORMED,
-                    getXMLLang(), "Stanza not well-formed", null);
-            write(errorStanza);
-            endSession(SessionTerminationCause.STREAM_ERROR);
-        }
+
+    public void onMessage(String data) {
+    	 LOG.info("< " + data);
+         try {
+             xmlReader.parse(IoBuffer.wrap(data.getBytes(CHARSET.name())), CHARSET_DECODER);
+         } catch (IOException e) {
+             // should never happen since we read from a string
+             throw new RuntimeException(e);
+         } catch (SAXException e) {
+             Stanza errorStanza = ServerErrorResponses.getStreamError(StreamErrorCondition.XML_NOT_WELL_FORMED,
+                     getXMLLang(), "Stanza not well-formed", null);
+             write(errorStanza);
+             endSession(SessionTerminationCause.STREAM_ERROR);
+         }
     }
 
     /**
      * {@inheritDoc}
      */
-    public void onDisconnect() {
-        LOG.info("WebSocket client disconnected");
+    public void onClose(int closeCode, String message) {
+        LOG.info("WebSocket client disconnected with Code " + closeCode + " with " + message);
         endSession(SessionTerminationCause.CONNECTION_ABORT);
     }
 
@@ -153,7 +151,7 @@ public class WebSocketBackedSessionConte
         // handle stream open
         Renderer renderer = new Renderer(stanza);
         if("stream".equals(stanza.getName()) && NamespaceURIs.HTTP_ETHERX_JABBER_ORG_STREAMS.equals(stanza.getNamespaceURI())) {
-            // stream:stream and stream:features comes at the same time, split them 
+            // stream:stream and stream:features comes at the same time, split them
             send(renderer.getOpeningElement());
             send(renderer.getElementContent());
         } else {
@@ -178,17 +176,5 @@ public class WebSocketBackedSessionConte
         // TODO how to handle?
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public void onMessage(byte frame, byte[] data, int offset, int length) {
-        // binary data, should not happen, ignore
-    }
 
-    /**
-     * {@inheritDoc}
-     */
-    public void onFragment(boolean more, byte opcode, byte[] data, int offset, int length) {
-        // binary data, should not happen, ignore
-    }
 }

Modified: mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java?rev=1178927&r1=1178926&r2=1178927&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java Tue Oct  4 19:37:01 2011
@@ -82,7 +82,7 @@ public class XmppWebSocketServlet extend
      * 
      * Will return null if the client does not provide the correct websocket sub protocol. "xmpp" is required.
      */
-    protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
+    public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
         if(SUB_PROTOCOL.equals(protocol)) {
             WebSocketBackedSessionContext sessionContext = new WebSocketBackedSessionContext(serverRuntimeContext);
             return sessionContext;

Modified: mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java?rev=1178927&r1=1178926&r2=1178927&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/test/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketBackedSessionContextTest.java Tue Oct  4 19:37:01 2011
@@ -27,7 +27,7 @@ import org.apache.vysper.xmpp.server.Ser
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
-import org.eclipse.jetty.websocket.WebSocket.Outbound;
+import org.eclipse.jetty.websocket.WebSocket.Connection;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -40,17 +40,17 @@ public class XmppWebSocketBackedSessionC
 
     private StanzaProcessor stanzaProcessor = Mockito.mock(StanzaProcessor.class);
     private ServerRuntimeContext serverRuntimeContext = Mockito.mock(ServerRuntimeContext.class);
-    private Outbound outbound = Mockito.mock(Outbound.class);
+    private Connection outbound = Mockito.mock(Connection.class);
 
     @Before
     public void before() {
         Mockito.when(serverRuntimeContext.getStanzaProcessor()).thenReturn(stanzaProcessor);
     }
-    
+
     @Test
     public void onMessage() {
         WebSocketBackedSessionContext context = new WebSocketBackedSessionContext(serverRuntimeContext);
-        context.onMessage((byte)1, "<test></test>");
+        context.onMessage("<test></test>");
 
         Stanza expected = new StanzaBuilder("test").build();
         Mockito.verify(stanzaProcessor).processStanza(Mockito.eq(serverRuntimeContext), Mockito.any(SessionContext.class), Mockito.eq(expected), Mockito.any(SessionStateHolder.class));
@@ -59,11 +59,11 @@ public class XmppWebSocketBackedSessionC
     @Test
     public void write() throws IOException {
         WebSocketBackedSessionContext context = new WebSocketBackedSessionContext(serverRuntimeContext);
-        context.onConnect(outbound);
-        
+        context.onOpen(outbound);
+
         Stanza stanza = new StanzaBuilder("test").build();
         context.write(stanza);
-        
+
         Mockito.verify(outbound).sendMessage("<test></test>");
     }