You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2011/10/23 00:22:52 UTC

svn commit: r1187817 - in /activemq/trunk: ./ activemq-optional/src/main/java/org/apache/activemq/transport/http/ activemq-optional/src/main/java/org/apache/activemq/transport/https/ activemq-optional/src/main/java/org/apache/activemq/transport/ws/

Author: tabish
Date: Sat Oct 22 22:22:51 2011
New Revision: 1187817

URL: http://svn.apache.org/viewvc?rev=1187817&view=rev
Log:
https://issues.apache.org/jira/browse/AMQ-3504

Move to the latest Jetty version that still allows the Web Console to work.  This version has the latest websocket updates that jetty has to offer.

Modified:
    activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportFactory.java
    activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportServer.java
    activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTunnelServlet.java
    activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportFactory.java
    activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportServer.java
    activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java
    activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompServlet.java
    activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompSocket.java
    activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java
    activemq/trunk/pom.xml

Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportFactory.java?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportFactory.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportFactory.java Sat Oct 22 22:22:51 2011
@@ -96,5 +96,4 @@ public class HttpTransportFactory extend
 
         return transport;
     }
-
 }

Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportServer.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportServer.java?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportServer.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportServer.java Sat Oct 22 22:22:51 2011
@@ -26,17 +26,11 @@ import org.apache.activemq.transport.xst
 import org.apache.activemq.util.ServiceStopper;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.bio.SocketConnector;
-import org.eclipse.jetty.server.handler.ContextHandler;
-import org.eclipse.jetty.server.session.SessionHandler;
-import org.eclipse.jetty.servlet.ServletHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.servlet.ServletMapping;
-
-/**
- * 
- */
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+
 public class HttpTransportServer extends TransportServerSupport {
+
     private URI bindAddress;
     private TextWireFormat wireFormat;
     private Server server;
@@ -78,39 +72,17 @@ public class HttpTransportServer extends
     protected void doStart() throws Exception {
         server = new Server();
         if (connector == null) {
-            connector = new SocketConnector();
+            connector = new SelectChannelConnector();
         }
         connector.setHost(bindAddress.getHost());
         connector.setPort(bindAddress.getPort());
         connector.setServer(server);
-        server.setConnectors(new Connector[] {
-            connector
-        });
-
-        ContextHandler contextHandler = new ContextHandler();
-        contextHandler.setContextPath("/");
-        contextHandler.setServer(server);
-        server.setHandler(contextHandler);
-
-        SessionHandler sessionHandler = new SessionHandler();
-        contextHandler.setHandler(sessionHandler);
-
-        ServletHandler servletHandler = new ServletHandler();
-        sessionHandler.setHandler(servletHandler);
-
-        ServletHolder holder = new ServletHolder();
-        holder.setName("httpTunnel");
-        holder.setClassName(HttpTunnelServlet.class.getName());
-        servletHandler.setServlets(new ServletHolder[] {
-            holder
-        });
-
-        ServletMapping mapping = new ServletMapping();
-        mapping.setServletName("httpTunnel");
-        mapping.setPathSpec("/*");
-        servletHandler.setServletMappings(new ServletMapping[] {
-            mapping
-        });
+        server.addConnector(connector);
+
+        ServletContextHandler contextHandler =
+            new ServletContextHandler(server, "/", ServletContextHandler.NO_SECURITY);
+
+        contextHandler.addServlet(HttpTunnelServlet.class, "/");
 
         contextHandler.setAttribute("acceptListener", getAcceptListener());
         contextHandler.setAttribute("wireFormat", getWireFormat());
@@ -130,5 +102,4 @@ public class HttpTransportServer extends
     public InetSocketAddress getSocketAddress() {
         return null;
     }
-
 }

Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTunnelServlet.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTunnelServlet.java?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTunnelServlet.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTunnelServlet.java Sat Oct 22 22:22:51 2011
@@ -96,15 +96,11 @@ public class HttpTunnelServlet extends H
             packet = (Command)transportChannel.getQueue().poll(requestTimeout, TimeUnit.MILLISECONDS);
 
             DataOutputStream stream = new DataOutputStream(response.getOutputStream());
-            // while( packet !=null ) {
             wireFormat.marshal(packet, stream);
             count++;
-            // packet = (Command) transportChannel.getQueue().poll(0,
-            // TimeUnit.MILLISECONDS);
-            // }
-
         } catch (InterruptedException ignore) {
         }
+
         if (count == 0) {
             response.setStatus(HttpServletResponse.SC_REQUEST_TIMEOUT);
         }
@@ -137,7 +133,6 @@ public class HttpTunnelServlet extends H
     }
 
     private boolean canProcessWireFormatVersion(int version) {
-        // TODO:
         return true;
     }
 

Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportFactory.java?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportFactory.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportFactory.java Sat Oct 22 22:22:51 2011
@@ -33,15 +33,13 @@ import org.apache.activemq.wireformat.Wi
 
 /**
  * Factory of HTTPS based transports
- * 
- * 
  */
 public class HttpsTransportFactory extends HttpTransportFactory {
-    
+
     public TransportServer doBind(String brokerId, URI location) throws IOException {
         return doBind(location);
     }
-    
+
     public TransportServer doBind(URI location) throws IOException {
         try {
             Map<String, String> options = new HashMap<String, String>(URISupport.parseParameters(location));
@@ -52,7 +50,7 @@ public class HttpsTransportFactory exten
         } catch (URISyntaxException e) {
             throw IOExceptionSupport.create(e);
         }
-        
+
     }
 
     protected Transport createTransport(URI location, WireFormat wf) throws MalformedURLException {

Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportServer.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportServer.java?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportServer.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/HttpsTransportServer.java Sat Oct 22 22:22:51 2011
@@ -32,40 +32,40 @@ public class HttpsTransportServer extend
     private String protocol;
     private String auth;
 
-	 public HttpsTransportServer(URI uri, HttpsTransportFactory factory) {
+     public HttpsTransportServer(URI uri, HttpsTransportFactory factory) {
         super(uri, factory);
     }
 
     public void doStart() throws Exception {
-    	Krb5AndCertsSslSocketConnector sslConnector = new Krb5AndCertsSslSocketConnector();
-    	
-    	if(auth != null){
-        	sslConnector.setMode(auth);
-        }
-    	
-        sslConnector.setKeystore(keyStore);
-        sslConnector.setPassword(keyStorePassword);
+        Krb5AndCertsSslSocketConnector sslConnector = new Krb5AndCertsSslSocketConnector();
+
+        if(auth != null){
+            sslConnector.setMode(auth);
+        }
+
+        sslConnector.getSslContextFactory().setKeyStore(keyStore);
+        sslConnector.getSslContextFactory().setKeyStorePassword(keyStorePassword);
         // if the keyPassword hasn't been set, default it to the
         // key store password
         if (keyPassword == null) {
-            sslConnector.setKeyPassword(keyStorePassword);
+            sslConnector.getSslContextFactory().setKeyStorePassword(keyStorePassword);
         }
         if (keyStoreType != null) {
-            sslConnector.setKeystoreType(keyStoreType);
+            sslConnector.getSslContextFactory().setKeyStoreType(keyStoreType);
         }
         if (secureRandomCertficateAlgorithm != null) {
-            sslConnector.setSecureRandomAlgorithm(secureRandomCertficateAlgorithm);
+            sslConnector.getSslContextFactory().setSecureRandomAlgorithm(secureRandomCertficateAlgorithm);
         }
         if (keyCertificateAlgorithm != null) {
-            sslConnector.setSslKeyManagerFactoryAlgorithm(keyCertificateAlgorithm);
+            sslConnector.getSslContextFactory().setSslKeyManagerFactoryAlgorithm(keyCertificateAlgorithm);
         }
         if (trustCertificateAlgorithm != null) {
-            sslConnector.setSslTrustManagerFactoryAlgorithm(trustCertificateAlgorithm);
+            sslConnector.getSslContextFactory().setTrustManagerFactoryAlgorithm(trustCertificateAlgorithm);
         }
         if (protocol != null) {
-            sslConnector.setProtocol(protocol);
+            sslConnector.getSslContextFactory().setProtocol(protocol);
         }
-        
+
         setConnector(sslConnector);
 
         super.doStart();
@@ -139,17 +139,17 @@ public class HttpsTransportServer extend
     }
 
     /**
-	 * @return the auth
-	 */
-	public String getAuth() {
-		return auth;
-	}
-
-	/**
-	 * @param auth the auth to set
-	 */
-	public void setAuth(String auth) {
-		this.auth = auth;
-	}
+     * @return the auth
+     */
+    public String getAuth() {
+        return auth;
+    }
+
+    /**
+     * @param auth the auth to set
+     */
+    public void setAuth(String auth) {
+        this.auth = auth;
+    }
 
 }

Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java Sat Oct 22 22:22:51 2011
@@ -5,9 +5,9 @@
  * licenses this file to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -17,8 +17,10 @@
 package org.apache.activemq.transport.https;
 
 import java.io.IOException;
-import java.net.InetAddress;
 import java.net.ServerSocket;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
 import java.security.Principal;
 import java.util.List;
 import java.util.Collections;
@@ -26,146 +28,169 @@ import java.util.Random;
 
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLServerSocket;
-import javax.net.ssl.SSLServerSocketFactory;
 import javax.net.ssl.SSLSocket;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.eclipse.jetty.http.HttpSchemes;
+import org.eclipse.jetty.http.ssl.SslContextFactory;
 import org.eclipse.jetty.io.EndPoint;
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.ssl.ServletSSL;
 import org.eclipse.jetty.server.ssl.SslSocketConnector;
 
 /**
- * Extend Jetty's {@link SslSocketConnector} to optionally also provide 
- * Kerberos5ized SSL sockets.  The only change in behavior from superclass
- * is that we no longer honor requests to turn off NeedAuthentication when
- * running with Kerberos support.
+ * Extend Jetty's {@link SslSocketConnector} to optionally also provide
+ * Kerberos5ized SSL sockets. The only change in behavior from superclass is
+ * that we no longer honor requests to turn off NeedAuthentication when running
+ * with Kerberos support.
  */
 public class Krb5AndCertsSslSocketConnector extends SslSocketConnector {
-  public static final List<String> KRB5_CIPHER_SUITES = 
-    Collections.unmodifiableList(Collections.singletonList(
-          "TLS_KRB5_WITH_3DES_EDE_CBC_SHA"));
-  static {
-    System.setProperty("https.cipherSuites", KRB5_CIPHER_SUITES.get(0));
-  }
-  
-  private static final Logger LOG = LoggerFactory.getLogger(Krb5AndCertsSslSocketConnector.class);
-
-  private static final String REMOTE_PRINCIPAL = "remote_principal";
-
-  public enum MODE {KRB, CERTS, BOTH} // Support Kerberos, certificates or both?
-
-  private boolean useKrb;
-  private boolean useCerts;
-
-  public Krb5AndCertsSslSocketConnector() {
-	  // By default, stick to cert based authentication
-    super();
-    useKrb = false;
-    useCerts = true;
-    setPasswords();
-  }
-  
-  public void setMode(String mode) {
-    useKrb = mode == MODE.KRB.toString() || mode == MODE.BOTH.toString();
-    useCerts = mode == MODE.CERTS.toString() || mode == MODE.BOTH.toString();
-    logIfDebug("useKerb = " + useKrb + ", useCerts = " + useCerts);
-  }
-
-  // If not using Certs, set passwords to random gibberish or else
-  // Jetty will actually prompt the user for some.
-  private void setPasswords() {
-   if(!useCerts) {
-     Random r = new Random();
-     System.setProperty("jetty.ssl.password", String.valueOf(r.nextLong()));
-     System.setProperty("jetty.ssl.keypassword", String.valueOf(r.nextLong()));
-   }
-  }
-  
-  @Override
-  protected SSLServerSocketFactory createFactory() throws Exception {
-    if(useCerts)
-      return super.createFactory();
-    
-    SSLContext context = super.getProvider()==null
-       ? SSLContext.getInstance(super.getProtocol())
-        :SSLContext.getInstance(super.getProtocol(), super.getProvider());
-    context.init(null, null, null);
-    
-    System.err.println("Creating socket factory");
-    return context.getServerSocketFactory();
-  }
-  
-  /* (non-Javadoc)
-   * @see org.mortbay.jetty.security.SslSocketConnector#newServerSocket(java.lang.String, int, int)
-   */
-  @Override
-  protected ServerSocket newServerSocket(String host, int port, int backlog)
-      throws IOException {
-	  System.err.println("Creating new KrbServerSocket for: " + host);
-    logIfDebug("Creating new KrbServerSocket for: " + host);
-    SSLServerSocket ss = null;
-    
-    if(useCerts) // Get the server socket from the SSL super impl
-      ss = (SSLServerSocket)super.newServerSocket(host, port, backlog);
-    else { // Create a default server socket
-      try {
-        ss = (SSLServerSocket)(host == null 
-         ? createFactory().createServerSocket(port, backlog) :
-           createFactory().createServerSocket(port, backlog, InetAddress.getByName(host)));
-      } catch (Exception e)
-      {
-        LOG.warn("Could not create KRB5 Listener", e);
-        throw new IOException("Could not create KRB5 Listener: " + e.toString());
-      }
-    }
-    
-    // Add Kerberos ciphers to this socket server if needed.
-    if(useKrb) {
-      ss.setNeedClientAuth(true);
-      String [] combined;
-      if(useCerts) { // combine the cipher suites
-        String[] certs = ss.getEnabledCipherSuites();
-        combined = new String[certs.length + KRB5_CIPHER_SUITES.size()];
-        System.arraycopy(certs, 0, combined, 0, certs.length);
-        System.arraycopy(KRB5_CIPHER_SUITES.toArray(new String[0]), 0, combined,
-              certs.length, KRB5_CIPHER_SUITES.size());
-      } else { // Just enable Kerberos auth
-        combined = KRB5_CIPHER_SUITES.toArray(new String[0]);
-      }
-      
-      ss.setEnabledCipherSuites(combined);
-    }
-    System.err.println("New socket created");
-    return ss;
-  };
-
-  @Override
-  public void customize(EndPoint endpoint, Request request) throws IOException {
-    if(useKrb) { // Add Kerberos-specific info
-      SSLSocket sslSocket = (SSLSocket)endpoint.getTransport();
-      Principal remotePrincipal = sslSocket.getSession().getPeerPrincipal();
-      logIfDebug("Remote principal = " + remotePrincipal);
-      request.setScheme(HttpSchemes.HTTPS);
-      request.setAttribute(REMOTE_PRINCIPAL, remotePrincipal);
-      
-      if(!useCerts) { // Add extra info that would have been added by super
-        String cipherSuite = sslSocket.getSession().getCipherSuite();
-        Integer keySize = Integer.valueOf(ServletSSL.deduceKeyLength(cipherSuite));;
-        
-        request.setAttribute("javax.servlet.request.cipher_suite", cipherSuite);
-        request.setAttribute("javax.servlet.request.key_size", keySize);
-      } 
-    }
-    
-    if(useCerts) super.customize(endpoint, request);
-    System.err.println();
-  }
-  
-  private void logIfDebug(String s) {
-    if(LOG.isDebugEnabled())
-      LOG.debug(s);
-  }
+    public static final List<String> KRB5_CIPHER_SUITES = Collections.unmodifiableList(Collections.singletonList("TLS_KRB5_WITH_3DES_EDE_CBC_SHA"));
+    static {
+        System.setProperty("https.cipherSuites", KRB5_CIPHER_SUITES.get(0));
+    }
+
+    private static final Logger LOG = LoggerFactory.getLogger(Krb5AndCertsSslSocketConnector.class);
+
+    private static final String REMOTE_PRINCIPAL = "remote_principal";
+
+    public enum MODE {
+        KRB, CERTS, BOTH
+    } // Support Kerberos, certificates or both?
+
+    private boolean useKrb;
+    private boolean useCerts;
+
+    public Krb5AndCertsSslSocketConnector() {
+        // By default, stick to cert based authentication
+        super();
+        useKrb = false;
+        useCerts = true;
+        setPasswords();
+    }
+
+    public void setMode(String mode) {
+        useKrb = mode == MODE.KRB.toString() || mode == MODE.BOTH.toString();
+        useCerts = mode == MODE.CERTS.toString() || mode == MODE.BOTH.toString();
+        logIfDebug("useKerb = " + useKrb + ", useCerts = " + useCerts);
+    }
+
+    // If not using Certs, set passwords to random gibberish or else
+    // Jetty will actually prompt the user for some.
+    private void setPasswords() {
+        if (!useCerts) {
+            Random r = new Random();
+            System.setProperty("jetty.ssl.password", String.valueOf(r.nextLong()));
+            System.setProperty("jetty.ssl.keypassword", String.valueOf(r.nextLong()));
+        }
+    }
+
+    // @Override
+    // protected SSLServerSocketFactory createFactory() throws Exception {
+    // if(useCerts)
+    // return super.createFactory();
+    //
+    // SSLContext context = super.getProvider()==null
+    // ? SSLContext.getInstance(super.getProtocol())
+    // :SSLContext.getInstance(super.getProtocol(), super.getProvider());
+    // context.init(null, null, null);
+    //
+    // System.err.println("Creating socket factory");
+    // return context.getServerSocketFactory();
+    // }
+
+    @Override
+    public SslContextFactory getSslContextFactory() {
+        final SslContextFactory factory = super.getSslContextFactory();
+
+        if (useCerts) {
+            return factory;
+        }
+
+        try {
+            SSLContext context = factory.getProvider() == null ? SSLContext.getInstance(factory.getProtocol()) : SSLContext.getInstance(factory.getProtocol(),
+                factory.getProvider());
+            context.init(null, null, null);
+            factory.setSslContext(context);
+        } catch (NoSuchAlgorithmException e) {
+        } catch (NoSuchProviderException e) {
+        } catch (KeyManagementException e) {
+        }
+
+        return factory;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.mortbay.jetty.security.SslSocketConnector#newServerSocket(java.lang
+     * .String, int, int)
+     */
+    @Override
+    protected ServerSocket newServerSocket(String host, int port, int backlog) throws IOException {
+        System.err.println("Creating new KrbServerSocket for: " + host);
+        logIfDebug("Creating new KrbServerSocket for: " + host);
+        SSLServerSocket ss = null;
+
+        if (useCerts) // Get the server socket from the SSL super impl
+            ss = (SSLServerSocket) super.newServerSocket(host, port, backlog);
+        else { // Create a default server socket
+            try {
+                ss = (SSLServerSocket) super.newServerSocket(host, port, backlog);
+            } catch (Exception e) {
+                LOG.warn("Could not create KRB5 Listener", e);
+                throw new IOException("Could not create KRB5 Listener: " + e.toString());
+            }
+        }
+
+        // Add Kerberos ciphers to this socket server if needed.
+        if (useKrb) {
+            ss.setNeedClientAuth(true);
+            String[] combined;
+            if (useCerts) { // combine the cipher suites
+                String[] certs = ss.getEnabledCipherSuites();
+                combined = new String[certs.length + KRB5_CIPHER_SUITES.size()];
+                System.arraycopy(certs, 0, combined, 0, certs.length);
+                System.arraycopy(KRB5_CIPHER_SUITES.toArray(new String[0]), 0, combined, certs.length, KRB5_CIPHER_SUITES.size());
+            } else { // Just enable Kerberos auth
+                combined = KRB5_CIPHER_SUITES.toArray(new String[0]);
+            }
+
+            ss.setEnabledCipherSuites(combined);
+        }
+        System.err.println("New socket created");
+        return ss;
+    };
+
+    @Override
+    public void customize(EndPoint endpoint, Request request) throws IOException {
+        if (useKrb) { // Add Kerberos-specific info
+            SSLSocket sslSocket = (SSLSocket) endpoint.getTransport();
+            Principal remotePrincipal = sslSocket.getSession().getPeerPrincipal();
+            logIfDebug("Remote principal = " + remotePrincipal);
+            request.setScheme(HttpSchemes.HTTPS);
+            request.setAttribute(REMOTE_PRINCIPAL, remotePrincipal);
+
+            if (!useCerts) { // Add extra info that would have been added by
+                             // super
+                String cipherSuite = sslSocket.getSession().getCipherSuite();
+                Integer keySize = Integer.valueOf(ServletSSL.deduceKeyLength(cipherSuite));
+                ;
+
+                request.setAttribute("javax.servlet.request.cipher_suite", cipherSuite);
+                request.setAttribute("javax.servlet.request.key_size", keySize);
+            }
+        }
+
+        if (useCerts)
+            super.customize(endpoint, request);
+        System.err.println();
+    }
+
+    private void logIfDebug(String s) {
+        if (LOG.isDebugEnabled())
+            LOG.debug(s);
+    }
 }

Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompServlet.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompServlet.java?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompServlet.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompServlet.java Sat Oct 22 22:22:51 2011
@@ -28,16 +28,13 @@ import org.eclipse.jetty.websocket.WebSo
 import org.eclipse.jetty.websocket.WebSocketServlet;
 
 /**
- * 
  * Handle connection upgrade requests and creates web sockets
- *
  */
 public class StompServlet extends WebSocketServlet {
-
     private static final long serialVersionUID = -4716657876092884139L;
-    
+
     private TransportAcceptListener listener;
-    
+
     public void init() throws ServletException {
         super.init();
         listener = (TransportAcceptListener)getServletContext().getAttribute("acceptListener");
@@ -46,15 +43,15 @@ public class StompServlet extends WebSoc
         }
     }
 
-    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
+    protected void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException ,IOException  {
         getServletContext().getNamedDispatcher("default").forward(request,response);
     }
-    
-    protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
+
+    @Override
+    public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
         StompSocket socket = new StompSocket();
         listener.onAccept(socket);
         return socket;
     }
-    
 }

Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompSocket.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompSocket.java?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompSocket.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompSocket.java Sat Oct 22 22:22:51 2011
@@ -32,22 +32,24 @@ import org.apache.activemq.util.ServiceS
 import org.eclipse.jetty.websocket.WebSocket;
 
 /**
- *
  * Implements web socket and mediates between servlet and the broker
- *
  */
-class StompSocket extends TransportSupport implements WebSocket, StompTransport {
-    Outbound outbound;
+class StompSocket extends TransportSupport implements WebSocket.OnTextMessage, StompTransport {
+    Connection outbound;
     ProtocolConverter protocolConverter = new ProtocolConverter(this, null);
     StompWireFormat wireFormat = new StompWireFormat();
 
-    public void onConnect(Outbound outbound) {
-        this.outbound=outbound;
+    @Override
+    public void onOpen(Connection connection) {
+        this.outbound = connection;
     }
 
-    public void onMessage(byte frame, byte[] data,int offset, int length) {}
+    @Override
+    public void onClose(int closeCode, String message) {
+    }
 
-    public void onMessage(byte frame, String data) {
+    @Override
+    public void onMessage(String data) {
         try {
             protocolConverter.onStompCommand((StompFrame)wireFormat.unmarshal(new ByteSequence(data.getBytes("UTF-8"))));
         } catch (Exception e) {
@@ -55,23 +57,25 @@ class StompSocket extends TransportSuppo
         }
     }
 
-    public void onDisconnect() {
-    }
-
+    @Override
     protected void doStart() throws Exception {
     }
 
+    @Override
     protected void doStop(ServiceStopper stopper) throws Exception {
     }
 
+    @Override
     public int getReceiveCounter() {
         return 0;
     }
 
+    @Override
     public String getRemoteAddress() {
         return "StompSocket_" + this.hashCode();
     }
 
+    @Override
     public void oneway(Object command) throws IOException {
         try {
             protocolConverter.onActiveMQCommand((Command)command);
@@ -80,16 +84,19 @@ class StompSocket extends TransportSuppo
         }
     }
 
+    @Override
     public X509Certificate[] getPeerCertificates() {
         return null;
     }
 
+    @Override
     public void sendToActiveMQ(Command command) {
         doConsume(command);
     }
 
+    @Override
     public void sendToStomp(StompFrame command) throws IOException {
-        outbound.sendMessage(WebSocket.SENTINEL_FRAME, command.format());
+        outbound.sendMessage(command.format());
     }
 
     @Override

Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java Sat Oct 22 22:22:51 2011
@@ -26,8 +26,8 @@ import org.apache.activemq.util.ServiceS
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.bio.SocketConnector;
-import org.eclipse.jetty.server.handler.ContextHandler;
 import org.eclipse.jetty.server.session.SessionHandler;
+import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.servlet.ServletMapping;
@@ -37,11 +37,11 @@ import org.eclipse.jetty.servlet.Servlet
  *
  */
 public class WSTransportServer extends TransportServerSupport {
-    
+
     private URI bindAddress;
     private Server server;
     private Connector connector;
-    
+
     public WSTransportServer(URI location) {
         super(location);
         this.bindAddress = location;
@@ -57,8 +57,8 @@ public class WSTransportServer extends T
         server.setConnectors(new Connector[] {
                 connector
         });
-        
-        ContextHandler contextHandler = new ContextHandler();
+
+        ServletContextHandler contextHandler = new ServletContextHandler();
         contextHandler.setContextPath("/");
         contextHandler.setServer(server);
         server.setHandler(contextHandler);
@@ -68,7 +68,7 @@ public class WSTransportServer extends T
 
         ServletHandler servletHandler = new ServletHandler();
         sessionHandler.setHandler(servletHandler);
-        
+
         ServletHolder holder = new ServletHolder();
         holder.setName("WSStomp");
         holder.setClassName(StompServlet.class.getName());
@@ -84,7 +84,7 @@ public class WSTransportServer extends T
         });
 
         contextHandler.setAttribute("acceptListener", getAcceptListener());
-        
+
         server.start();
     }
 

Modified: activemq/trunk/pom.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/pom.xml?rev=1187817&r1=1187816&r2=1187817&view=diff
==============================================================================
--- activemq/trunk/pom.xml (original)
+++ activemq/trunk/pom.xml Sat Oct 22 22:22:51 2011
@@ -67,7 +67,7 @@
     <hsqldb-version>1.7.2.2</hsqldb-version>
     <jasypt-version>1.8</jasypt-version>
     <jdom-version>1.0</jdom-version>
-    <jetty-version>7.1.6.v20100715</jetty-version>
+    <jetty-version>7.5.1.v20110908</jetty-version>
     <jsp-version>2.1.v20100127</jsp-version>
     <jstl-version>1.1.2</jstl-version>
     <jettison-version>1.3</jettison-version>