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/01/08 12:10:37 UTC
svn commit: r1056691 - in /mina/vysper/trunk/server/extensions/websockets:
./ src/examples/java/org/apache/vysper/xmpp/extension/websockets/
src/main/java/org/apache/vysper/xmpp/extension/websockets/
Author: ngn
Date: Sat Jan 8 11:10:36 2011
New Revision: 1056691
URL: http://svn.apache.org/viewvc?rev=1056691&view=rev
Log:
Cleaning up and adding Javadocs to websockets implementation
Added:
mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/ServerMain.java
- copied unchanged from r1055583, mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/ServerMain.java
Removed:
mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/ServerMain.java
Modified:
mina/vysper/trunk/server/extensions/websockets/pom.xml
mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java
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/WebSocketEndpoint.java
mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/XmppWebSocketServlet.java
Modified: mina/vysper/trunk/server/extensions/websockets/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/pom.xml?rev=1056691&r1=1056690&r2=1056691&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/pom.xml (original)
+++ mina/vysper/trunk/server/extensions/websockets/pom.xml Sat Jan 8 11:10:36 2011
@@ -64,13 +64,35 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
-
+
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope>
</dependency>
-
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <id>add-source</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>src/examples/java</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
</project>
Modified: mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java?rev=1056691&r1=1056690&r2=1056691&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/examples/java/org/apache/vysper/xmpp/extension/websockets/DemoServer.java Sat Jan 8 11:10:36 2011
@@ -35,10 +35,9 @@ import org.apache.vysper.xmpp.modules.ex
import org.apache.vysper.xmpp.modules.extension.xep0119_xmppping.XmppPingModule;
import org.apache.vysper.xmpp.modules.extension.xep0202_entity_time.EntityTimeModule;
import org.apache.vysper.xmpp.server.XMPPServer;
-import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.server.handler.ResourceHandler;
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
/**
* starts the server as a standalone application
@@ -70,23 +69,28 @@ public class DemoServer {
accountManagement.addUser("user3@vysper.org", "password1");
}
- Server jetty = new Server();
- Connector connector = new SelectChannelConnector();
- connector.setPort(8080);
- jetty.addConnector(connector);
XMPPServer server = new XMPPServer("vysper.org");
- // example of how you can combine Vysper with other resources
- ResourceHandler resourceHandler = new ResourceHandler();
- resourceHandler.setResourceBase("src/examples/client");
- jetty.setHandler(resourceHandler);
server.addEndpoint(new TCPEndpoint());
- WebsocketsEndpoint wsEndpoint = new WebsocketsEndpoint();
+ WebSocketEndpoint wsEndpoint = new WebSocketEndpoint() {
+
+ // example of how you can combine Vysper with other resources
+ @Override
+ protected Server createJettyServer() {
+ Server jetty = super.createJettyServer();
+ ResourceHandler resourceHandler = new ResourceHandler();
+ resourceHandler.setResourceBase("src/examples/client");
+ jetty.setHandler(resourceHandler);
+ HandlerCollection handlers = new HandlerCollection();
+ handlers.addHandler(resourceHandler);
+ jetty.setHandler(handlers);
+
+ return jetty;
+ }
+ };
- // provide our custom server to have the ResourceHandler added
- wsEndpoint.setServer(jetty);
// wsEndpoint.setSSLEnabled(true);
// wsEndpoint.setSSLCertificateKeystore("src/test/resources/keystore.jks", "password");
wsEndpoint.setContextPath("/ws");
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=1056691&r1=1056690&r2=1056691&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 Sat Jan 8 11:10:36 2011
@@ -36,6 +36,7 @@ import org.apache.vysper.xmpp.protocol.S
import org.apache.vysper.xmpp.protocol.StreamErrorCondition;
import org.apache.vysper.xmpp.server.AbstractSessionContext;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
+import org.apache.vysper.xmpp.server.SessionContext;
import org.apache.vysper.xmpp.server.SessionState;
import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
import org.apache.vysper.xmpp.stanza.Stanza;
@@ -46,6 +47,7 @@ import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;
/**
+ * Specialized {@link SessionContext} for Websocket endpoints.
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
@@ -78,18 +80,30 @@ public class WebSocketBackedSessionConte
xmlReader.setContentHandler(contentHandler);
}
+ /**
+ * {@inheritDoc}
+ */
public StanzaWriter getResponseWriter() {
return this;
}
+ /**
+ * {@inheritDoc}
+ */
public void switchToTLS(boolean delayed, boolean clientTls) {
// n/a
}
+ /**
+ * {@inheritDoc}
+ */
public void setIsReopeningXMLStream() {
// n/a
}
+ /**
+ * {@inheritDoc}
+ */
public void onConnect(Outbound outbound) {
LOG.info("WebSocket client connected");
this.outbound = outbound;
@@ -98,6 +112,9 @@ public class WebSocketBackedSessionConte
sessionStateHolder.setState(SessionState.ENCRYPTED);
}
+ /**
+ * {@inheritDoc}
+ */
public void onMessage(byte frame, String data) {
LOG.info("< " + data);
try {
@@ -113,17 +130,25 @@ public class WebSocketBackedSessionConte
}
}
-
+ /**
+ * {@inheritDoc}
+ */
public void onDisconnect() {
LOG.info("WebSocket client disconnected");
endSession(SessionTerminationCause.CONNECTION_ABORT);
}
+ /**
+ * {@inheritDoc}
+ */
public void stanza(XMLElement element) {
// on parsed stanzas
serverRuntimeContext.getStanzaProcessor().processStanza(serverRuntimeContext, this, (Stanza) element, sessionStateHolder);
}
+ /**
+ * {@inheritDoc}
+ */
public void write(Stanza stanza) {
// handle stream open
Renderer renderer = new Renderer(stanza);
@@ -146,14 +171,23 @@ public class WebSocketBackedSessionConte
}
}
+ /**
+ * {@inheritDoc}
+ */
public void close() {
// 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/WebSocketEndpoint.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java?rev=1056691&r1=1056690&r2=1056691&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java (original)
+++ mina/vysper/trunk/server/extensions/websockets/src/main/java/org/apache/vysper/xmpp/extension/websockets/WebSocketEndpoint.java Sat Jan 8 11:10:36 2011
@@ -36,7 +36,6 @@ import org.slf4j.LoggerFactory;
/**
* Allows HTTP clients to communicate via the WebSocket protocol with Vysper.
- * <p>
* See http://tools.ietf.org/html/draft-moffitt-xmpp-over-websocket-00
*
* @author The Apache MINA Project (dev@mina.apache.org)
@@ -59,13 +58,17 @@ public class WebSocketEndpoint implement
protected String contextPath = "/";
+ /**
+ * {@inheritDoc}
+ */
public void setServerRuntimeContext(ServerRuntimeContext serverRuntimeContext) {
this.serverRuntimeContext = serverRuntimeContext;
}
/**
- * Setter for the listen port
- * @param port
+ * Set the port on which the endpoint will listen for incoming traffic.
+ * Defaults to 8080.
+ * @param port The TCP/IP listener port
*/
public void setPort(int port) {
this.port = port;
@@ -76,8 +79,8 @@ public class WebSocketEndpoint implement
* <p>
* Required if SSL is enabled. Also, setting the keystore password is
* required.
- * @see #setSSLCertificateKeystorePassword
- * @param keystorePath the path to the Java keystore
+ * @param keystorePath The path to the Java keystore
+ * @param password The password for the Java keystore
*/
public void setSSLCertificateKeystore(String keystorePath, String password) {
sslKeystorePath = keystorePath;
@@ -106,14 +109,6 @@ public class WebSocketEndpoint implement
}
/**
- * Provide a custom Jetty Server
- * @param server
- */
- public void setServer(Server server) {
- this.server = server;
- }
-
- /**
* create a basic Jetty server including a connector on the configured port
* override in subclass to create a different kind of setup or to reuse an existing instance
* @return
@@ -154,24 +149,21 @@ public class WebSocketEndpoint implement
}
/**
- * @throws IOException
- * @throws RuntimeException a wrapper of the possible
- * {@link java.lang.Exception} that Jetty can throw at start-up
+ * {@inheritDoc}
+ *
+ * @throws RuntimeException a wrapper of the possible {@link java.lang.Exception} that Jetty can throw at start-up
*/
public void start() throws IOException {
- HandlerCollection handlers = new HandlerCollection();
- if(server != null) {
- Handler handler = server.getHandler();
- if(handler != null) {
- handlers.addHandler(handler);
- }
+ server = createJettyServer();
+ Handler wsHandler = createHandler();
+
+ Handler existingHandler = server.getHandler();
+ if(existingHandler != null && existingHandler instanceof HandlerCollection) {
+ ((HandlerCollection)existingHandler).addHandler(wsHandler);
} else {
- server = createJettyServer();
+ server.setHandler(wsHandler);
}
- Handler handler = createHandler();
- handlers.addHandler(handler);
- server.setHandler(handlers);
try {
server.start();
} catch (Exception e) {
@@ -179,6 +171,9 @@ public class WebSocketEndpoint implement
}
}
+ /**
+ * {@inheritDoc}
+ */
public void stop() {
try {
server.stop();
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=1056691&r1=1056690&r2=1056691&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 Sat Jan 8 11:10:36 2011
@@ -19,10 +19,11 @@
*/
package org.apache.vysper.xmpp.extension.websockets;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
-import org.apache.vysper.xmpp.protocol.SessionStateHolder;
import org.apache.vysper.xmpp.server.ServerRuntimeContext;
import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketServlet;
@@ -30,11 +31,20 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
+ * Servlet for initiating websocket connections. Only support in Jetty.
+ * <p>
+ * When creating this servlet from web.xml, the Vysper server needs to be started beforehand
+ * (e.g. from a {@link ServletContextListener} and the {@link ServerRuntimeContext} needs to be
+ * added as an attribute in the {@link ServletContext} with the key "org.apache.vysper.xmpp.server.ServerRuntimeContext".
+ * </p>
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
public class XmppWebSocketServlet extends WebSocketServlet {
+ /**
+ * The attribute key for the {@link ServerRuntimeContext} in {@link ServletContext}
+ */
public static final String SERVER_RUNTIME_CONTEXT_ATTRIBUTE = "org.apache.vysper.xmpp.server.ServerRuntimeContext";
private final static Logger LOG = LoggerFactory.getLogger(XmppWebSocketServlet.class);
@@ -52,6 +62,9 @@ public class XmppWebSocketServlet extend
this.serverRuntimeContext = serverRuntimeContext;
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public void init() throws ServletException {
super.init();
@@ -64,6 +77,11 @@ public class XmppWebSocketServlet extend
}
}
+ /**
+ * {@inheritDoc}
+ *
+ * Will return null if the client does not provide the correct websocket sub protocol. "xmpp" is required.
+ */
protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
if(SUB_PROTOCOL.equals(protocol)) {
WebSocketBackedSessionContext sessionContext = new WebSocketBackedSessionContext(serverRuntimeContext);