Updating web socket stuff to for Karaf 4.2.1 migration.
Change-Id: Ie4a354e4c28461bbaffc6f33d1dfa95bc7514a2b
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
index 77f0f1f..25c2f03 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocket.java
@@ -60,8 +60,7 @@
*/
@WebSocket
-public class UiWebSocket
- implements UiConnection {
+public class UiWebSocket implements UiConnection {
private static final Logger log = LoggerFactory.getLogger(UiWebSocket.class);
@@ -88,10 +87,6 @@
private static final long MAX_AGE_MS = 30_000;
- private static final byte PING = 0x9;
- private static final byte PONG = 0xA;
- private static final byte[] PING_DATA = new byte[]{(byte) 0xde, (byte) 0xad};
-
private final ObjectMapper mapper = new ObjectMapper();
private final ServiceDirectory directory;
private final UiTopoSession topoSession;
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
index 4faae28..040e98a 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
@@ -18,15 +18,15 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
+import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
+import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
+import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
import org.onlab.osgi.DefaultServiceDirectory;
import org.onlab.osgi.ServiceDirectory;
import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
import java.security.Principal;
import java.util.Set;
import java.util.Timer;
@@ -38,6 +38,7 @@
public class UiWebSocketServlet extends WebSocketServlet {
private static final long PING_DELAY_MS = 5000;
+ private static final long IDLE_TIMEOUT_MS = 10000;
private static UiWebSocketServlet instance;
private static final Object INSTANCE_LOCK = new Object();
@@ -45,13 +46,15 @@
private static ServiceDirectory directory = new DefaultServiceDirectory();
private final Set<UiWebSocket> sockets = Sets.newConcurrentHashSet();
+
private final Timer timer = new Timer();
private final TimerTask pruner = new Pruner();
private static boolean isStopped = false;
@Override
public void configure(WebSocketServletFactory webSocketServletFactory) {
-
+ webSocketServletFactory.getPolicy().setIdleTimeout(IDLE_TIMEOUT_MS);
+ webSocketServletFactory.setCreator(new UiWebSocketCreator());
}
/**
@@ -78,25 +81,6 @@
timer.schedule(pruner, PING_DELAY_MS, PING_DELAY_MS);
}
- @Override
- public void service(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- super.service(request, response);
- if (isStopped) {
- return;
- }
-
- // FIXME: Replace this with globally shared opaque token to allow secure failover
- Principal p = request.getUserPrincipal();
- String userName = p != null ? p.getName() : FAKE_USERNAME;
-
- UiWebSocket socket = new UiWebSocket(directory, userName);
- sockets.add(socket);
- }
-
- // FIXME: This should not be necessary
- private static final String FAKE_USERNAME = "UI-user";
-
/**
* Sends the specified message to all the GUI clients.
*
@@ -138,4 +122,22 @@
});
}
}
+
+ // FIXME: This should not be necessary
+ private static final String FAKE_USERNAME = "UI-user";
+
+ public class UiWebSocketCreator implements WebSocketCreator {
+ @Override
+ public Object createWebSocket(ServletUpgradeRequest request, ServletUpgradeResponse response) {
+ if (!isStopped) {
+ // FIXME: Replace this with globally shared opaque token to allow secure failover
+ Principal p = request.getUserPrincipal();
+ String userName = p != null ? p.getName() : FAKE_USERNAME;
+
+ UiWebSocket socket = new UiWebSocket(directory, userName);
+ sockets.add(socket);
+ }
+ return null;
+ }
+ }
}