Updates to use jetty 9.2.14
diff --git a/wave/build.gradle b/wave/build.gradle
index bffd82e..362f137 100644
--- a/wave/build.gradle
+++ b/wave/build.gradle
@@ -147,24 +147,24 @@
             [group: "org.atmosphere", name: "atmosphere-guice", version: "0.8.3"],                              // [?, ?]
             [group: "org.atmosphere", name: "atmosphere-runtime", version: "2.1.0"],                            // [?, ?]
             [group: "org.bouncycastle", name: "bcprov-jdk16", version: "1.45"],                                 // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-annotations", version: "9.1.1.v20140108"],                // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-client", version: "9.1.1.v20140108"],                     // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-continuation", version: "9.1.1.v20140108"],               // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-http", version: "9.1.1.v20140108"],                       // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-io", version: "9.1.1.v20140108"],                         // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-proxy", version: "9.1.1.v20140108"],                      // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-security", version: "9.1.1.v20140108"],                   // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-server", version: "9.1.1.v20140108"],                     // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-servlet", version: "9.1.1.v20140108"],                    // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-servlets", version: "9.1.1.v20140108"],                   // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-util", version: "9.1.1.v20140108"],                       // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-webapp", version: "9.1.1.v20140108"],                     // [?, ?]
-            [group: "org.eclipse.jetty", name: "jetty-xml", version: "9.1.1.v20140108"],                        // [?, ?]
-            [group: "org.eclipse.jetty.websocket", name: "websocket-api", version: "9.1.1.v20140108"],          // [?, ?]
-            [group: "org.eclipse.jetty.websocket", name: "websocket-client", version: "9.1.1.v20140108"],       // [?, ?]
-            [group: "org.eclipse.jetty.websocket", name: "websocket-common", version: "9.1.1.v20140108"],       // [?, ?]
-            [group: "org.eclipse.jetty.websocket", name: "websocket-server", version: "9.1.1.v20140108"],       // [?, ?]
-            [group: "org.eclipse.jetty.websocket", name: "websocket-servlet", version: "9.1.1.v20140108"],      // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-annotations", version: "9.2.14.v20151106"],                // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-client", version: "9.2.14.v20151106"],                     // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-continuation", version: "9.2.14.v20151106"],               // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-http", version: "9.2.14.v20151106"],                       // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-io", version: "9.2.14.v20151106"],                         // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-proxy", version: "9.2.14.v20151106"],                      // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-security", version: "9.2.14.v20151106"],                   // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-server", version: "9.2.14.v20151106"],                     // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-servlet", version: "9.2.14.v20151106"],                    // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-servlets", version: "9.2.14.v20151106"],                   // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-util", version: "9.2.14.v20151106"],                       // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-webapp", version: "9.2.14.v20151106"],                     // [?, ?]
+            [group: "org.eclipse.jetty", name: "jetty-xml", version: "9.2.14.v20151106"],                        // [?, ?]
+            [group: "org.eclipse.jetty.websocket", name: "websocket-api", version: "9.2.14.v20151106"],          // [?, ?]
+            [group: "org.eclipse.jetty.websocket", name: "websocket-client", version: "9.2.14.v20151106"],       // [?, ?]
+            [group: "org.eclipse.jetty.websocket", name: "websocket-common", version: "9.2.14.v20151106"],       // [?, ?]
+            [group: "org.eclipse.jetty.websocket", name: "websocket-server", version: "9.2.14.v20151106"],       // [?, ?]
+            [group: "org.eclipse.jetty.websocket", name: "websocket-servlet", version: "9.2.14.v20151106"],      // [?, ?]
             [group: "org.gnu.inet", name: "libidn", version: "1.15"],                                           // [?, ?]
             [group: "org.igniterealtime", name: "tinder", version: "1.2.3"],                                    // [1/2016, 6/2016]
             [group: "org.igniterealtime.whack", name: "core", version: "2.0.0"],                                // [1/2016, 6/2016]
diff --git a/wave/src/main/java/org/waveprotocol/box/server/ServerMain.java b/wave/src/main/java/org/waveprotocol/box/server/ServerMain.java
index 14e2491..d258f9c 100644
--- a/wave/src/main/java/org/waveprotocol/box/server/ServerMain.java
+++ b/wave/src/main/java/org/waveprotocol/box/server/ServerMain.java
@@ -26,7 +26,6 @@
 import com.typesafe.config.Config;
 import com.typesafe.config.ConfigFactory;
 import org.apache.commons.configuration.ConfigurationException;
-import org.eclipse.jetty.proxy.ProxyServlet;
 import org.waveprotocol.box.common.comms.WaveClientRpc.ProtocolWaveClientRpc;
 import org.waveprotocol.box.server.authentication.AccountStoreHolder;
 import org.waveprotocol.box.server.authentication.SessionManager;
@@ -67,15 +66,7 @@
 import org.waveprotocol.wave.model.wave.ParticipantIdUtil;
 import org.waveprotocol.wave.util.logging.Log;
 
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServlet;
 import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Map;
 
 /**
  * Wave Server entrypoint.
@@ -84,33 +75,6 @@
 
   private static final Log LOG = Log.get(ServerMain.class);
 
-  @SuppressWarnings("serial")
-  @Singleton
-  public static class GadgetProxyServlet extends HttpServlet {
-
-    ProxyServlet.Transparent proxyServlet;
-
-    @Inject
-    public GadgetProxyServlet(Config config) {
-      String gadgetServerHostname = config.getString("core.gadget_server_hostname");
-      int gadgetServerPort = config.getInt("core.gadget_server_port");
-      LOG.info("Starting GadgetProxyServlet for " + gadgetServerHostname + ":" + gadgetServerPort);
-      proxyServlet = new ProxyServlet.Transparent(
-          "http://" + gadgetServerHostname + ":" + gadgetServerPort + "/gadgets",
-          "/gadgets");
-    }
-
-    @Override
-    public void init(ServletConfig config) throws ServletException {
-      proxyServlet.init(config);
-    }
-
-    @Override
-    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
-      proxyServlet.service(req, res);
-    }
-  }
-
   public static void main(String... args) {
     try {
       Module coreSettings = new AbstractModule() {
@@ -230,11 +194,11 @@
     server.addServlet("/iniavatars/*", InitialsAvatarsServlet.class);
     server.addServlet("/waveref/*", WaveRefServlet.class);
 
-    String gadgetHostName = config.getString("core.gadget_server_hostname");
-    int port = config.getInt("core.gadget_server_port");
-    Map<String, String> initParams =
-        Collections.singletonMap("hostHeader", gadgetHostName + ":" + port);
-    server.addServlet("/gadgets/*", GadgetProxyServlet.class, initParams);
+    String gadgetServerHostname = config.getString("core.gadget_server_hostname");
+    int gadgetServerPort = config.getInt("core.gadget_server_port");
+    LOG.info("Starting GadgetProxyServlet for " + gadgetServerHostname + ":" + gadgetServerPort);
+    server.addTransparentProxy("/gadgets/*",
+        "http://" + gadgetServerHostname + ":" + gadgetServerPort + "/gadgets", "/gadgets");
 
     server.addServlet("/", WaveClientServlet.class);
 
diff --git a/wave/src/main/java/org/waveprotocol/box/server/rpc/ServerRpcProvider.java b/wave/src/main/java/org/waveprotocol/box/server/rpc/ServerRpcProvider.java
index b053870..4d43ebb 100755
--- a/wave/src/main/java/org/waveprotocol/box/server/rpc/ServerRpcProvider.java
+++ b/wave/src/main/java/org/waveprotocol/box/server/rpc/ServerRpcProvider.java
@@ -41,10 +41,10 @@
 import org.atmosphere.cpr.*;
 import org.atmosphere.guice.AtmosphereGuiceServlet;
 import org.atmosphere.util.IOUtils;
+import org.eclipse.jetty.proxy.ProxyServlet;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
-//import org.eclipse.jetty.server.nio.SelectChannelConnector;
 import org.eclipse.jetty.server.session.HashSessionManager;
 import org.eclipse.jetty.servlet.DefaultServlet;
 import org.eclipse.jetty.servlet.ServletHolder;
@@ -482,7 +482,7 @@
   }
 
   /**
-   * @return a list of {@link SelectChannelConnector} each bound to a host:port
+   * @return a list of {@link Connector} each bound to a host:port
    *         pair form the list addresses.
    */
   private List<Connector> getSelectChannelConnectors(
@@ -823,4 +823,22 @@
   public void addFilter(String urlPattern, Class<? extends Filter> filter) {
     filterRegistry.add(new Pair<String, Class<? extends Filter>>(urlPattern, filter));
   }
+
+  /**
+   * Add a transparent proxy to the servlet registry. The servlet will proxy to the
+   * specified URL pattern.
+   * @param urlPattern the URL pattern for paths. Eg, '/foo', '/foo/*'.
+   * @param proxyTo the URL to proxy to.
+   * @param prefix the prefix that should be proxied.
+   */
+  public void addTransparentProxy(String urlPattern, String proxyTo, String prefix) {
+    Preconditions.checkNotNull(urlPattern);
+    Preconditions.checkNotNull(proxyTo);
+    Preconditions.checkNotNull(prefix);
+
+    ServletHolder proxy = new ServletHolder(ProxyServlet.Transparent.class);
+    proxy.setInitParameter("proxyTo", proxyTo);
+    proxy.setInitParameter("prefix", prefix);
+    servletRegistry.add(Pair.of(urlPattern, proxy));
+  }
 }