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>");
}