Updating web socket stuff to for Karaf 4.2.1 migration.

Change-Id: Ie4a354e4c28461bbaffc6f33d1dfa95bc7514a2b
diff --git a/tools/package/etc/org.apache.karaf.features.cfg b/tools/package/etc/org.apache.karaf.features.cfg
index 88818f6..33cb5cf 100644
--- a/tools/package/etc/org.apache.karaf.features.cfg
+++ b/tools/package/etc/org.apache.karaf.features.cfg
@@ -53,12 +53,12 @@
     webconsole/4.2.1, \
     scr/4.2.1, \
     war/4.2.1, \
-    onos-api/1.15.0.SNAPSHOT, \
-    onos-core/1.15.0.SNAPSHOT, \
-    onos-incubator/1.15.0.SNAPSHOT, \
-    onos-cli/1.15.0.SNAPSHOT, \
-    onos-rest/1.15.0.SNAPSHOT
-    #onos-gui
+    onos-api/$ONOS_VERSION, \
+    onos-core/$ONOS_VERSION, \
+    onos-incubator/$ONOS_VERSION, \
+    onos-cli/$ONOS_VERSION, \
+    onos-rest/$ONOS_VERSION
+    #onos-gui/$ONOS_VERSION
 
 
 #
diff --git a/tools/package/features/BUILD b/tools/package/features/BUILD
index de3fd20..f4a68f8 100644
--- a/tools/package/features/BUILD
+++ b/tools/package/features/BUILD
@@ -134,12 +134,10 @@
     name = "onos-rest",
     description = "ONOS REST API components",
     included_bundles = [
-        "//utils/rest:onlab-rest",
         "//web/api:onos-rest",
     ],
     required_features = [
         "onos-api",
-        "onos-thirdparty-web",
     ],
     visibility = ["//visibility:public"],
 )
@@ -155,25 +153,13 @@
 )
 
 osgi_feature(
-    name = "onos-cli2",
-    description = "stripped down ONOS admin command console components",
-    included_bundles = [
-        "//cli2:onos-cli2",
-    ],
-    required_features = ["onos-api"],
-    visibility = ["//visibility:public"],
-)
-
-osgi_feature(
     name = "onos-gui",
     description = "ONOS GUI console components",
     included_bundles = [
         "//web/gui:onos-gui",
-        "//utils/rest:onlab-rest",
     ],
     required_features = [
         "onos-api",
-        "onos-thirdparty-web",
     ],
     visibility = ["//visibility:public"],
 )
@@ -183,22 +169,20 @@
     description = "ONOS GUI2 components",
     included_bundles = [
         "//web/gui2:onos-gui2",
-        "//utils/rest:onlab-rest",
     ],
     required_features = [
         "onos-api",
-        "onos-thirdparty-web",
     ],
     visibility = ["//visibility:public"],
 )
 
-osgi_feature(
-    name = "onos-security",
-    description = "Security-Mode ONOS",
-    included_bundles = [
-        "@org_apache_felix_framework_security//jar",
-        "//core/security:onos-security",
-    ],
-    required_features = ["onos-api"],
-    visibility = ["//visibility:public"],
-)
+#osgi_feature(
+#    name = "onos-security",
+#    description = "Security-Mode ONOS",
+#    included_bundles = [
+#        "@org_apache_felix_framework_security//jar",
+#        "//core/security:onos-security",
+#    ],
+#    required_features = ["onos-api"],
+#    visibility = ["//visibility:public"],
+#)
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;
+        }
+    }
 }